class SomeGeneric<T> where T : enum
エラー : 型が必要です。
と、コンパイルエラーが出てしまいます。それならと、System.Enum に変更してみました。
class SomeGeneric<T> where T : System.Enum
エラー : 制約は特殊クラス 'System.Enum' にはなれません。
これもだめだそうです。そうですか。残念です。他にも System.Array 型、 System.Delegate 型、 System.ValueType 型で型制約することはできないようです。
参考
http://msdn.microsoft.com/ja-jp/library/56b2hk61.aspx
コンパイラ エラー CS0702
仕方がないので、System.Enum の定義にある IConvertible を型制約にして
とりあえず int 型にできればいいやという発想。
// System.Enum の定義
public abstract class Enum
: ValueType, IComparable, IFormattable, IConvertible
class SomeGeneric where T : IConvertible
{
protected T item = default(T);
// enum : long で列挙されると困るので virtual 宣言
public virtual T Item
{
get
{
return item;
}
set
{
if (item.ToInt32(null) != value.ToInt32(null))
{
// Do something
}
}
}
}
0 件のコメント:
コメントを投稿