ジェネリック型を開くことができない理由をパラメータとして渡します。私はよく次のようなクラスを持っています:c#ジェネリック型をパラメータとして渡すことができないのはなぜですか?
public class Example<T> where T: BaseClass
{
public int a {get; set;}
public List<T> mylist {get; set;}
}
そう言いますと、BaseClassは以下のようになります。
public BaseClass
{
public int num;
}
私はその後、発言の方法をしたい:
public int MyArbitarySumMethod(Example example)//This won't compile Example not closed
{
int sum = 0;
foreach(BaseClass i in example.myList)//myList being infered as an IEnumerable
sum += i.num;
sum = sum * example.a;
return sum;
}
私は、次のように単にパラメータとして、この1つのクラスを渡すためのインタフェースを記述する必要があります。
public interface IExample
{
public int a {get; set;}
public IEnumerable<BaseClass> myIEnum {get;}
}
ジェネリッククラスを次に変更する必要があります:
public class Example<T>: IExample where T: BaseClass
{
public int a {get; set;}
public List<T> mylist {get; set;}
public IEnumerable<BaseClass> myIEnum {get {return myList;} }
}
コンパイラが推論できると思っていたことは、大いに盛大です。何かが変更できない場合でも、シンタックスのショートカットがない理由/正当性を知っていれば、心理的に非常に役立ちます。
あなたがどのように制限をかけようとしているかわからないので、あなたが話している制限は本当に明確ではありません。私はあなたが何を意味しているのか考えていますが、その質問ははっきりしていません。 –
"[どのように]ジェネリックタイプを開くか"と尋ねるとどういう意味ですか? –
@Rich、 'T'が指定されていない場合、どうすれば構文的に' Example 'を(たとえ原則として)渡すでしょうか? –