2010-11-22 185 views

回答

7

一种选择是改写这个强制呼叫者在工厂方法传递/λ

public T GetObject<T>(Func<string,T> func) 
{ 
    return func("Hello"); 
} 

调用站点将被修改,看起来像这样

GetObject(x => new T(x)); 
11

是的,但只是没有编译时检查如果构造确实存在:Activator.CreateInstance

public T GetObject<T>() 
{ 
    return (T)Activator.CreateInstance(typeof(T), "Hello"); 
} 
+0

因此,如果`(字符串)`构造函数不存在,它会是一个运行时错误? – Smashery 2010-11-23 00:06:27

+0

@Smashery:没错。如果`T`没有公共的`(string)`构造函数,它会抛出一个异常。 – dtb 2010-11-23 00:07:10

0

号目前不能使用参数化的构造与普通类型的,因为你不能在定义它们。

使用Activator是不一样的 - 我相信不是你的问题的答案 - 但你可以使用它当然。

相关问题