.NET 中没有这种类型的约束。只有六种类型的约束可用(请参阅类型参数的约束):
where T: struct
类型参数必须是值类型
where T: class
类型参数必须是引用类型
where T: new()
类型参数必须有一个公共的无参数构造函数
where T: <base class name>
类型参数必须是或派生自指定的基类
where T: <interface name>
类型参数必须是或实现指定的接口
where T: U
为 T 提供的类型参数必须是或派生自为 U 提供的参数
如果您想将字符串转换为您的类型,您可以先转换为对象。但是您不能对类型参数施加约束以确保可以发生这种转换:
static T GetObjectFromRegistry<T>(string regPath)
{
string regValue = //Getting the regisstry value...
T objectValue = (T)(object)regValue;
return objectValue ;
}
另一种选择 - 创建界面:
public interface IInitializable
{
void InitFrom(string s);
}
并将其作为约束:
static T GetObjectFromRegistry<T>(string regPath)
where T: IInitializable, new()
{
string regValue = //Getting the regisstry value...
T objectValue = new T();
objectValue.InitFrom(regValue);
return objectValue ;
}