.NET には、そのようなタイプの制約はありません。使用できる制約は 6 種類のみです (「型パラメーターの制約」を参照)。
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 ;
}