gpt4 book ai didi

c# - C# 中泛型参数的空值或默认比较

转载 作者:IT王子 更新时间:2023-10-29 03:52:44 25 4
gpt4 key购买 nike

我有一个这样定义的通用方法:

public void MyMethod<T>(T myArgument)

我要做的第一件事是检查 myArgument 的值是否是该类型的默认值,如下所示:

if (myArgument == default(T))

但这不能编译,因为我不能保证 T 会实现 == 运算符。所以我将代码切换为:

if (myArgument.Equals(default(T)))

现在可以编译了,但是如果 myArgument 为 null 则会失败,这是我正在测试的内容的一部分。我可以像这样添加一个显式空检查:

if (myArgument == null || myArgument.Equals(default(T)))

现在这对我来说是多余的。 ReSharper 甚至建议我将 myArgument == null 部分更改为 myArgument == default(T) ,这是我开始的地方。有没有更好的方法来解决这个问题?

我需要支持两种引用类型和值类型。

最佳答案

为避免装箱,比较泛型是否相等的最佳方法是使用 EqualityComparer<T>.Default .这方面IEquatable<T> (没有装箱)以及 object.Equals ,并处理所有 Nullable<T> “解除”细微差别。因此:

if(EqualityComparer<T>.Default.Equals(obj, default(T))) {
return obj;
}

这将匹配:

  • 类为空
  • Nullable<T> 为空(空)
  • 其他结构的零/假/等

关于c# - C# 中泛型参数的空值或默认比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/864243/

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