【发布时间】:2013-11-20 04:28:05
【问题描述】:
我有一个泛型类,其中包含一个值。这个类存储了一个默认值,我想检查存储的值是否等于默认值。
起初,我只是简单地尝试了:
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?
编辑:响应cmets
假设该类如下所示:
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
{
// ?
}
}
}
【问题讨论】:
-
请同时显示声明,即您使用泛型类型参数的声明
标签: c# generics comparison