我想从一个泛型方法中构造一个对象。该对象在构造函数中使用string
。类似这样的:构造一个通用对象(不是默认构造函数)
public T GetObject<T>()
{
return new T("Hello");
}
这可能吗?
我想从一个泛型方法中构造一个对象。该对象在构造函数中使用string
。类似这样的:构造一个通用对象(不是默认构造函数)
public T GetObject<T>()
{
return new T("Hello");
}
这可能吗?
一种选择是改写这个强制呼叫者在工厂方法传递/λ
public T GetObject<T>(Func<string,T> func)
{
return func("Hello");
}
调用站点将被修改,看起来像这样
GetObject(x => new T(x));
是的,但只是没有编译时检查如果构造确实存在:Activator.CreateInstance
public T GetObject<T>()
{
return (T)Activator.CreateInstance(typeof(T), "Hello");
}
号目前不能使用参数化的构造与普通类型的,因为你不能在定义它们。
使用Activator是不一样的 - 我相信不是你的问题的答案 - 但你可以使用它当然。
因此,如果`(字符串)`构造函数不存在,它会是一个运行时错误? – Smashery 2010-11-23 00:06:27
@Smashery:没错。如果`T`没有公共的`(string)`构造函数,它会抛出一个异常。 – dtb 2010-11-23 00:07:10