类型为可转型的C#通用约束
有没有一种方式使用C#泛型来限制类型T可以从另一种类型转换?
示例 :
比方说,我将信息以string
保存在注册表中,当我恢复信息时,我希望有一个类似如下的函数:
static T GetObjectFromRegistry<T>(string regPath) where T castable from string
{
string regValue = //Getting the regisstry value...
T objectValue = (T)regValue;
return objectValue ;
}
.NET中没有这种类型的约束。 只有六种类型的约束可用(请参阅类型参数的约束):
where T: struct
类型参数必须是值类型 where T: class
类型参数必须是引用类型 where T: new()
类型的参数必须具有公共无参数构造函数 where T: <base class name>
类型参数必须是或从指定的基类派生 where T: <interface name>
类型参数必须是或实现指定的接口 where T: U
为T提供的where T: U
类型参数必须是或为从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 ;
}
类型在编译期间确定。 运行期间不能更改类型。 可以将对象投射到其基类或子类
Ref -
对象之间的区别a =新的狗()vs狗a =新的狗()
约束条件就像“T的类型必须是U类型或继承类型U”一样,所以你正在寻找的约束是不可行的。
一切都是“浇注”到String
无论如何,通过.ToString()
因人而异)