令人惊讶的是,以下代码未能通过断言:
int? wtf = 0;
Assert.IsType<Nullable<int>>(wtf);
出于好奇,您如何确定给定实例是否为 Nullable<> 对象?
最佳答案
首先,Nullable<T>
是一个结构,所以没有这样的对象。你不能调用 GetType()
,因为这会将值装箱(此时您要么得到 null 并因此出现异常,要么装箱的不可为 null 的值因此不是您想要的类型)。
(拳击是什么搞砸了你的断言 - 我会假设 IsType
接受 object
。)
虽然您可以使用类型推断来获取变量的类型作为类型参数:
public bool IsNullable<T>(T value)
{
return Nullable.GetUnderlyingType(typeof(T)) != null;
}
当您像您的示例那样在编译时知道确切的类型时,这并不是一个很大的用处,但它对泛型很有用。 (当然,还有其他实现方式。)
你的真实生活情况是怎样的?我假设这不是这样的断言,因为您在编译时就知道这个问题的答案。
关于c# - 通过反射检测可空类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6026824/