C# .Net-转换或转换装箱字节?,短?还是int?到int?
如果我有一个C# .Net-转换或转换装箱字节?,短?还是int?到int?,c#,.net,casting,int,nullable,C#,.net,Casting,Int,Nullable,如果我有一个对象引用一个字节?、短?或int?,有没有办法无条件地将该对象引用强制转换或转换为int?没有为每个案例编写单独的代码 例如: byte? aByte = 42; // .. or aByte = null object anObject = aByte; //... var anInt = (int?)anObject //As expected, doesn't work 我会使用: 请注意,当您将int?、short?或byte?放入框中时,您总是会得到一个空引用或一个装箱的
对象
引用一个字节?
、短?
或int?
,有没有办法无条件地将该对象引用强制转换或转换为int?没有为每个案例编写单独的代码
例如:
byte? aByte = 42; // .. or aByte = null
object anObject = aByte;
//...
var anInt = (int?)anObject //As expected, doesn't work
我会使用:
请注意,当您将int?
、short?
或byte?
放入框中时,您总是会得到一个空引用或一个装箱的不可空值-没有“装箱的可空值”这样的东西
Convert.ToInt32
将适用于您提到的所有装箱类型-尽管它也适用于字符串“42”等。这有问题吗?我会使用:
var i = (anObject as IConvertible).ToInt32(null);
请注意,当您将int?
、short?
或byte?
放入框中时,您总是会得到一个空引用或一个装箱的不可空值-没有“装箱的可空值”这样的东西
Convert.ToInt32
将适用于您提到的所有装箱类型-尽管它也适用于字符串“42”等。这是问题吗?对不起,但您所说的“无条件强制转换”是什么意思?我的意思是“无论它是什么-字节短还是int,将其转换为int”对不起,但您所说的“无条件强制转换”是什么意思“不管它是什么-字节短还是int,请将其转换为int“记住,他是在处理可空项。如果anObject
为null,这将抛出。我猜这是一个可以为null的类型的原因,原因是它可能为null,在这种情况下,我们的代码会崩溃up@AnthonyPegram,它不适用于这个问题。你为什么会这样想?它之所以适用,是因为他在问题和示例中明确使用了可空类型。他的特定代码示例使用42这一事实并不否定他的代码正在处理装箱的byte?、short?、int?
,等等。好的,我稍微更改了示例,记住他正在处理空值。如果anObject
为null,这将抛出。我猜这是一个可以为null的类型的原因,原因是它可能为null,在这种情况下,我们的代码会崩溃up@AnthonyPegram,它不适用于这个问题。你为什么会这样想?它之所以适用,是因为他在问题和示例中明确使用了可空类型。他的特定代码示例使用42这一事实并不否定他的代码正在处理装箱的byte?,short?,int?
,等等。对,我稍微改变了示例,当装箱一个包含空值的null
时,结果对象==null?@BorisB.:是的。(结果引用-没有涉及对象。)@BorisB自己试试,ReferenceEquals((int?)null,null)
返回true。因此,当装箱一个包含null值的null
时,结果对象==null?@BorisB.:是。(结果引用-没有涉及任何对象。)@BorisB自己试试,ReferenceEquals((int?)null,null)
返回true。
var i = (anObject as IConvertible).ToInt32(null);