値を含むジェネリック クラスがあります。このクラスにはデフォルト値が保存されており、保存された値がデフォルト値と等しいかどうかを確認したいと思います。
最初に、私は簡単に試しました:
public bool IsDefault
{
get
{
return value == defaultValue;
}
}
しかし、残念なことに (そして驚くべきことに)、それはコンパイルされません。コンパイラは、T と T を比較できないと文句を言います。2 番目のアプローチは次のとおりです。
public bool IsDefault
{
get
{
if (value == null)
return defaultValue == null;
else
return value.Equals(defaultValue);
}
}
動作しますが、文字列に問題があります。私の場合、null 文字列は空の文字列に等しいためですが、前のコードではそれがカバーされていません。
クラスを文字列に特化することもできますが、必要がない場合は避けます。2 つの 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
{
// ?
}
}
}