标识类型是否为int或Nullable <int>

时间:2018-11-24 16:01:53

标签: c# reflection nullable typechecking

反射代码。

我可以检查一下     myTypeObject == typeof(decimal)|| myTypeObject == typeof(十进制?)

有什么方法可以做到而无需重复decimal

我正在猜测类似的东西:

myRealTypeObject = myTypeObject.IsNullable() ? myTypeObject.GetTypeInsideNullability() : myTypeObject;
myRealTypeObject == typeof(decimal)

2 个答案:

答案 0 :(得分:1)

我不认为重复decimal一词是不好。您始终可以将其提取到方法中。

但是无论如何,这是一种不涉及两个decimal的检查方法:

Type d = typeof(decimal);
bool check = myTypeObject == d || myTypeObject == typeof(Nullable<>).MakeGenericType(d);

如果您希望将其作为扩展方法:

public static bool IsTypeOrNullable(this Type t, Type u) {
    return t == u || t == typeof(Nullable<>).MakeGenericType(u);
}
// usage: myTypeObject.IsTypeOrNullabel(typeof(decimal))

答案 1 :(得分:1)

您可以使用Nullable.GetUnderlyingType,如果输入类型不可为空,则返回null:

var myRealTypeObject = Nullable.GetUnderlyingType(myTypeObject) ?? myTypeObject;

如果您有一些要检查的对象,则可以使用is(或as):

bool isDecimal = boxedDecimal is decimal?;