如何在c#中测试变量是否是值类型?
本文关键字:是否是 类型 变量 测试 | 更新日期: 2023-09-27 18:05:19
我有几个地方,我有一个泛型类型参数,不限于类(或结构),当我试图比较该类型的变量与null
, Resharper强调它,抱怨我可能比较值类型与null
(一个有效的反对,可以肯定)。是否有一种可接受的方法来检查变量是否为值类型,然后再与null进行比较?
public TObject MyProperty { get; set; }
...
private void SomeMethod()
{
if(MyProperty == null) //Warning here
{
...
}
}
我一直在做if(!(MyProperty is ValueType) && MyProperty)
——这是有效的吗?它不会去掉警告,但这并不一定意味着什么。
如果它是一个值类型,你想做什么?有时我会这样做:
public void DoStuff<T> (T variable)
{
if(variable == default(T))
... // true if null or 0 in the case of a value type
}
或:
if( typeof(T).IsValueType )
。
您可以使用反射,但它很慢,应该避免使用:
bool isValueType = typeof(TObject).IsValueType;
你的泛型方法真的需要传递引用类型和值类型作为它的类型参数吗? 你可以直接比较类型:
if (MyProperty.GetType() == typeof(...))
{
}
您得到一个警告,因为MyProperty
没有分配给。
public static bool IsNull<T>(T t)
{
return ((Object)t == null);
}