我有一个通用类,其中包含一个值。该类存储一个默认值,我想检查存储的值是否等于默认值。
起初,我尝试了以下方式:
但不幸的是(也让人惊讶的是),这并不能编译——编译器会抱怨它无法将 T 与 T 进行比较。第二种方法是:
它可以工作,但是我在字符串方面有一个问题,因为在我的情况下,空字符串等于空字符串,但是先前的代码没有涵盖到这一点。
如果可能的话,我可能会专门为字符串类进行特殊处理,但如果不必要的话,我会避免这样做。有没有一种以通用方式比较两个T的方法?
英译中:
起初,我尝试了以下方式:
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
{
// ?
}
}
}