タイプ 'int'に制約されているジェネリックメソッドがある場合は、必ずジェネリックTタイプに整数をキャストできます。例えば...
public T ExampleMethod<T>(int unchanged) where T : int
{
return (T)unchanged;
}
...コンパイラはそれに不平を言うタイプ 'int'を 'T'に変換できませんターゲットが整数であることを示す制約があります。だから確かにそれは動作するはずですか?
更新:
実際のシナリオは、enum値を返すヘルパーメソッドが必要なことです。だから私の理想的なヘルパーメソッドは、もっとこれに似ています....
public T GetAttributeAsEnum<T>(XmlReader reader, string name) where T : enum
{
string s = reader.GetAttribute(name);
int i = int.Parse(s);
return (T)i;
}
...これをこのように使う...
StateEnum x = GetAttributeAsEnum<StateEnum>(xmlReader, "State");
CategoryEnum y = GetAttributeAsEnum<CategoryEnum>(xmlReader, "Category");
OtherEnum z = GetAttributeAsEnum<OtherEnum>(xmlReader, "Other");
...あなたはenumで制約することはできません。
"クラスまたはインタフェースのみが制約として指定できます。"(c)ReSharper
int(Int32)は単なる構造体です。あなたはTが構造体。構造体を制約として使用することはできません。
あなたがここで見つけることができる可能な制約の全リスト - http://msdn.microsoft.com/en-us/library/d5x73970.aspx
UPD
Enumの制約については、この質問を参照してください - &quot;特別なクラス&quot;のジェネリックタイプ制約の回避策はありますか? C#3.0のEnum?
public class Generic<T> where T : struct { }
。そのクラスを次のようにインスタンス化できます。Generic<int> gen = new Generic<int>();
。 - Eric J.
int(および他のすべての数値型と列挙型)は、ジェネリック制約として使用できません。
見る
詳細とオプションについては、
ジェネリックスと型制約については、C#の作成者Anders Hejlsbergとの議論
http://www.artima.com/intv/generics.html
型制約を置くことができます。構造体このような:
public class Generic<T> where T : struct { }
Generic<int> gen = new Generic<int>();
そのコンパイルは本当ですか?
ここでは、次のエラーが発生します。
エラーCS0701: 'int'は有効な制約ではありません。タイプとして使用される 制約は、インターフェース、非密封クラス、またはタイプでなければならない パラメータ。
T
? - gilly3T
ジェネリックを使用する理由は常にintですか? - default locale