Is there a way with C# generics to limit a type T
to be castable from another type?
Example:
Lets say I am saving information in the registry as a string
, and when I restore the information I would like to have a function that looks something like that:
static T GetObjectFromRegistry<T>(string regPath) where T castable from string
{
string regValue = //Getting the registry value...
T objectValue = (T)regValue;
return objectValue ;
}
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 UIf 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 ;
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With