blu*_*uee 7 c# generics reflection
我有这个方法:
public List<T> SomeMethod<T>( params ) where T : new()
Run Code Online (Sandbox Code Playgroud)
所以SomeMethod
如果我知道类型,我想称之为好的:
SomeMethod<Class1>();
Run Code Online (Sandbox Code Playgroud)
但如果我只是Class1
在运行时我无法调用它?
那么如何SomeMethod
使用未知的T型调用?我用反射得到了Type.
我有类型的类型,但SomeMethod<Type | GetType()>
不起作用.
更新7. May:
以下是我想要实现的示例代码:
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 };
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是一个从更大的背景中获取的演示.
你需要使用反射来调用它:
var method = typeof(SomeClass).GetMethod("SomeMethod");
method.MakeGenericMethod(someType).Invoke(...);
Run Code Online (Sandbox Code Playgroud)
您可以在 C# 4 中使用dynamic
关键字。您还需要 .NET 4.0 或更高版本。:
SomeMethod((dynamic)obj);
Run Code Online (Sandbox Code Playgroud)
运行时推断实际类型参数并进行调用。如果为 null,则失败,obj
因为此时没有留下任何类型信息。C# 中的 null 没有类型。
归档时间: |
|
查看次数: |
5041 次 |
最近记录: |