C#4の動的キーワードは、以前は不可能だった特定のジェネリック操作を許可しますか?

StackOverflow https://stackoverflow.com/questions/1630729

  •  06-07-2019
  •  | 
  •  

質問

C#4の dynamic キーワードは、以前は不可能だったオブジェクトを操作する新しい方法を導入します。これはジェネリックとどのように重複しますか?具体的には、現在合法かつ有効な潜在的に有用な操作がありますか?

たとえば、これは現在不可能です:

// Use a type whose value is known only at runtime.
Type t = ...;
List<t> l = new List<t>();
// ... (add some items to the list)
t first = l[0];

dynamic が利用可能になったら、同様のことを実現する方法はありますか?

役に立ちましたか?

解決

dynamicはここではあまり役に立ちません。最初にオブジェクトを作成するには、 Type.GetGenericTypeDefinition() / MakeGenericType()を使用する必要がありますが、これは快適ではありません。

それを正しく理解していれば、dynamicが行うことは、そのように型を構築すると、作業しやすくなります。例えば、 you は、コンパイラが持っていなくても、あるタイプのリストがあることを知っています。そのため、そのリストを動的変数に割り当てた場合、その .Add()メソッドを呼び出すなどの操作を実行でき、呼び出しは実行時に解決されるはずです。

しかし、私はまだ個人的にこれで遊んでいません。したがって、自分で試してみるまで、これはまだ単なる伝聞です。

他のヒント

あなたは本当にそれを望む必要がありますが、あなたは今それをすることができます。観察:

Type t = ...;
typeof(List<>)
    .MakeGenericType(t)
    .GetMethod(...);

ジェネリックとリフレクション:一緒に良いというわけではありませんが、必要な場合は...

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top