gpt4 book ai didi

c# - 如何比较T与T?

转载 作者:行者123 更新时间:2023-11-30 15:31:56 24 4
gpt4 key购买 nike

我有一个通用类,其中包含一个值。此类存储默认值,我想检查存储的值是否等于默认值。

起初,我简单地尝试了:

public bool IsDefault
{
get
{
return value == defaultValue;
}
}

但不幸的是(令人惊讶的是)它没有编译——编译器提示说它不能将 T 与 T 进行比较。第二种方法是:

public bool IsDefault
{
get
{
if (value == null)
return defaultValue == null;
else
return value.Equals(defaultValue);
}
}

它有效,但我对字符串有疑问,因为在我的例子中,空字符串等于空字符串,但前面的代码没有涵盖这一点。

我可能会专门针对字符串类,但如果没有必要,我会避免这样做。有没有办法以通用方式比较两个 T?


编辑:回应评论

假设类如下所示:

public class MyClass<T>
{
private T value;
private T defaultValue;

public MyClass(T newDefault)
{
value = newDefault;
defaultValue = newDefault;
}

public T Value
{
get
{
return value;
}
set
{
this.value = value;
}
}

public bool IsDefault
{
get
{
// ?
}
}
}

最佳答案

您的类的构造函数应该采用 IEqualityComparer<T>作为参数,重载可以传入 EqualityComparer<T>.Default .存储它并用于测试是否相等。对于字符串,传入 IEqualityComparer<string>考虑"" == null .

像这样:

class Example<T>
{
private readonly IEqualityComparer<T> comparer;
private readonly T defaultValue;
private T value;

public Example(T value, T defaultValue, IEqualityComparer<T> comparer)
{
this.value = value;
this.defaultValue = defaultValue;
this.comparer = comparer;
}

public Example(T value, T defaultValue)
: this(value, defaultValue, EqualityComparer<T>.Default)
{
}

public Example(T value)
: this(value, default(T))
{
}

public Example()
: this (default(T))
{
}

public bool IsDefault
{
get
{
if (value == null)
{
return defaultValue == null;
}
else
{
return comparer.Equals(value, defaultValue);
}
}
}
}

关于c# - 如何比较T与T?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19854368/

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