c# - 通过反射检测可空类型

标签 c# reflection nullable

令人惊讶的是,以下代码未能通过断言:

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/

相关文章:

c# - 是否应该处置静态方法中的 ObjectContext?

java - 如何使用反射访问 JUnit 中的私有(private) map ?

c# - 如何转换十进制?到十进制

c# - 编译器如何理解 Nullables?

c# - 是否有像Unity这样的东西可以用于不需要界面的简单事物?

c# - 你如何在 wpf 中创建数据表?

xml - 有没有办法让 XSLT 回显支持它的 XML?

java - j2objc真的支持反射吗?

tsql - 如何通过避免扫描空值来减少索引扫描

c# - WPF Windows 上的夜视模式