C# generic constraint for Type to be castable
There is no such type of constraints in .NET. There is only six types of constraints available (see Constraints on Type Parameters):
where T: struct
type argument must be a value typewhere T: class
type argument must be a reference typewhere T: new()
type argument must have a public parameterless constructorwhere T: <base class name>
type argument must be or derive from the specified base classwhere T: <interface name>
type argument must be or implement the specified interfacewhere T: U
type argument supplied for T must be or derive from the argument supplied for U
If you want to cast string to your type, you can do casting to object first. But you can't put constraint on type parameter to make sure this casting can occur:
static T GetObjectFromRegistry<T>(string regPath)
{
string regValue = //Getting the regisstry value...
T objectValue = (T)(object)regValue;
return objectValue ;
}
Another option - create interface:
public interface IInitializable
{
void InitFrom(string s);
}
And put it as constraint:
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 ;
}