8

私はこの方法を持っています:

public List<T> SomeMethod<T>( params ) where T : new()

したがってSomeMethod、タイプがわかっている場合はこれで問題ありません。

SomeMethod<Class1>();

しかし、実行時にしかない場合、Class1それを呼び出すことはできませんか?

SomeMethodでは、不明な T タイプで呼び出すにはどうすればよいでしょうか。リフレクションを使用して Type を取得しました。

タイプのタイプがありますが、SomeMethod<Type | GetType()>機能しません。

更新 7. 5 月:

これが私が達成したいことのサンプルコードです:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;

namespace ConsoleApplication63
{
    public class DummyClass
    {
    }

    public class Class1
    {
        public string Name;
    }

    class AssemblyTypesReflection
    {
        static void Main(string[] args)
        {
            object obj = new Class1() { Name = "John" } ;

            Assembly assembly = Assembly.GetExecutingAssembly();
            var AsmClass1 = (from i in assembly.GetTypes() where i.Name == "Class1" select i).FirstOrDefault();


            var list = SomeMethod<AsmClass1>((AsmClass1)obj); //Here it fails
        }

        static List<T> SomeMethod<T>(T obj) where T : new()
        {
            return new List<T> { obj };
        }
    }
}

これは、より大きなコンテキストから取り出したデモです。

4

2 に答える 2

8

リフレクションを使用して呼び出す必要があります。

var method = typeof(SomeClass).GetMethod("SomeMethod");
method.MakeGenericMethod(someType).Invoke(...);
于 2012-05-03T14:02:43.660 に答える