3

タイプのリストをジェネリックパラメーターとして渡すことができるかどうか疑問に思いました。不特定の数の型を取得してそれらを操作する必要があるクラスがあります。 このようなもの:

class o<TTypeCollection>
{
    private void someMethod()
    {

        repository.Save < TTypeCollection.First() > (MyCollectionViewSource.CurrentItem as TTypeCollection.First());

    }
}
4

1 に答える 1

2

C# で C++ スタイルのテンプレート メタプログラミングを行う方法はありませんが、リフレクションを使用して行うことができます。

private void someMethod() {
    var genericSave = repository // This can be done during initialization
        .GetType()
        .GetMethods()
        .Where(m => m.Name == "Save" && m.IsGenericMethodDefinition);
    var t = MyCollectionViewSource.CurrentItem.GetType();
    genericSave
        .MakeGenericMethod(new[] {t})
        .Invoke(new object[] {MyCollectionViewSource.CurrentItem});
}
于 2012-04-09T13:00:48.450 に答える