该对象是整数类型。 我可以用少于五行代码获得它的价值吗?
我有一个数据阅读器。 我想比较它的值和值42.我知道它是一个整数类型(例如,MySQL调用INT
, TINYINT
, SMALLINT
, MEDIUMINT
, BIGINT
, JUMBODELUXEINT
等)。 我不想将实际类型硬连接到C#代码。 我想出的最好的是
object x = reader.GetValue(i); uint k = x is byte ? (byte) x : x is short ? (uint) (short) x : x is ushort ? (ushort) x : x is int ? (int) (int) x : (uint) x; if (k == 42) { ... }
这似乎令人难以置信的啰嗦。 我尝试使用Equals
但是具有相同值的不同整数类型似乎不会测试相等。
有没有更好的办法?
只需检查Convert.ToUInt32(object)
…是的,它工作正常:
using System; class Test { static void Main() { Check((byte)10); Check((short)10); Check((ushort)10); Check((int)10); Check((uint)10); } static void Check(object o) { Console.WriteLine("Type {0} converted to UInt32: {1}", o.GetType().Name, Convert.ToUInt32(o)); } }
换句话说,您的代码可以是:
object x = reader.GetValue(i); uint k = Convert.ToUInt32(x); if (k == 42) { ... }
或者,假设所有uint
都可以表示为long,如果你使用的是数据读取器,你可以试试reader.GetInt64(i)
? 我不知道是否会为你完成转换,但它可能值得一试。
if(Convert.ToUInt32(reader.GetValue(i)) == 42) { ... }
您也可以反向做Skeet和Daniel的答案,如下所示:
if (k == Convert.ChangeType(42, k.GetType()) { ... }
我没有测试过它。
我不确定我是否理解正确,但我认为这应该有效:
int x = int.Parse(reader.GetValue(i).ToString()); if(x == 42) { // do your logic }
你可以试试这个:
unit k = Convert.ToUInt32(x);
不过,您可以更好地重命名变量。 上周 1个字母的变量是sooo 。
这应该工作:
object x = reader.GetValue(i); uint k; try { k = Convert.ToUInt32(x); } catch(InvalidCastException e) { ... } if (k == 42) { ... }