Non esiste una tipologia di vincoli in .NET. C'è solo sei tipi di vincoli disponibili (vedere Constraints on Type Parameters):
where T: struct
tipo argomento deve essere un tipo di valore
where T: class
tipo argomento deve essere un tipo di riferimento
where T: new()
tipo argomento deve avere un costruttore senza parametri pubblica
where T: <base class name>
l'argomento di tipo deve essere o derivare dalla classe base specificata
where T: <interface name>
l'argomento di tipo deve essere o implementare l'interfa specificato ce
where T: U
tipo di argomento fornito per T deve essere o derivare da l'argomento in dotazione per U
Se vuoi lanciare stringa per il tipo, si può fare la fusione prima di opporsi. Ma non si può mettere vincolo sul parametro type per assicurarsi che questo casting può verificarsi:
static T GetObjectFromRegistry<T>(string regPath)
{
string regValue = //Getting the regisstry value...
T objectValue = (T)(object)regValue;
return objectValue ;
}
Un'altra opzione - creare un'interfaccia:
public interface IInitializable
{
void InitFrom(string s);
}
E dirla come vincolo:
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 ;
}
fonte
2013-07-24 06:50:09
non v'è alcuna tali vincoli in .NET –