gpt4 book ai didi

C#:替代 GenericType == null

转载 作者:IT王子 更新时间:2023-10-29 04:28:13 30 4
gpt4 key购买 nike

我需要检查一个通用对象是否为 null 或 default(T)。但是我有一个问题......目前我是这样做的:

if (typeof(T).IsValueType)
{
if(default(T).Equals(thing))
// Do something
else
// Do something else
}
else
{
if(thing == null)
// Do something
else
// Do something else
}

但后来我又重复了一遍……我不喜欢这样。问题如下:

thing == null;

此处 ReSharper 警告 Possible compare of value type with 'null'。

thing == default(T);

这里我得到编译器错误:无法将运算符“==”应用于“T”和“T”类型的操作数。

thing.Equals(null|default(T));

thing 显然可以为 null(这就是我必须检查的原因!),因此会导致 NullReferenceException。

null|default(T).Equals(thing);

null 和 default(T) 通常也是 null...

有没有一种干净的方法来做到这一点??

最佳答案

正确的做法是:

return EqualityComparer<T>.Default.Equals(value, default(T))

没有拳击。您甚至可以像这样定义扩展方法:

public static void bool IsDefault<T>(this T value)
{
return EqualityComparer<T>.Default.Equals(value, default(T));
}

.. 并像这样调用它:

return entry.IsDefault();

不过,我个人并不关心 T 上的扩展方法(例如这个对象 IsNull()),因为它有时会妨碍可读性。

关于C#:替代 GenericType == null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/565564/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com