null
を返すことができる汎用メソッドを作成しています。汎用パラメータTをC#でNull可能にするには?
例として、私は以下のこのメソッドGetSecondSmallest(List<T>)
を作成しました。この関数は、IComparable
のすべての項目をループし、可能であれば2番目に小さい項目を返します。このアイテムが存在しない場合はnull
を返します。この方法の
public T? GetSecondSmallest<T>(List<T> items) where T : Nullable, IComparable
{
if (items.Count == 0) return null;
T smallest = items[0];
T? secondSmallest = null;
// Find second smallest by looping through list
return secondSmallest;
}
二つの例の使用法は次のようになります。
GetSecondSmallest(new List<int> {4, 2, 3, 1, 6, 8}) // Should return 2
GetSecondSmallest(new List<MyComparable> {new MyComparable('x')}) // Should return null
あなたはこのコードをコンパイルしようとするとあなたは問題がここにあるものを見ます:
エラーCS0717 'Nullable':静的クラスは制約として使用できません。
このメソッドは、T
またはnull
のインスタンスを返します。
EDIT:私はすでにthis questionを見てきましたが、これは私の状況では、パラメータも汎用的なので、私の質問に答えていない、とNullable
でなければなりません。したがって、その回答は適用されません。
@ j0ey_wh 'INullable'インターフェイスは、データベースで使用するように設計されています。 'Nullable'が実装しているインタフェースではありません。 –