c# - 在 C# 中应该如何测试变量是否为值类型?

标签 c# .net generics

<分区>

我有几个地方有一个不限于类(或结构)的泛型类型参数,当我尝试将该类型的变量与 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 )

参见 here .

关于c# - 在 C# 中应该如何测试变量是否为值类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7045016/

相关文章:

c# - 如何将方法参数传递给方法的属性值?

c# - 在控制台应用程序中使用 MediatR

c# - 如何使用 .net cil jmp 操作码

c# - GetType() 在父类(super class)构造函数中返回子类 Type

c# - 使用泛型检查默认值

制表符分隔文件中的 C# FileHelpers 空值

c# - 非 Linq 检查列表项的方法是相同的

C#、C++、WinAPI - 从另一个进程获取窗口数

generics - 当从一个泛型映射到另一个泛型时,为什么我必须破坏和重建泛型枚举的非泛型变体?

c# - 用于在 C# 中追加集合的 StringBuilder 扩展方法