Ich habe eine generische Klasse und möchte erzwingen, dass Instanzen des Typparameters immer "cast-fähig"/konvertierbar von String sind. Ist es möglich ohne eine Schnittstelle zu verwenden?Wie überprüft man, ob eine implizite oder explizite Umwandlung existiert?
Mögliche Umsetzung:
public class MyClass<T> where T : IConvertibleFrom<string>, new()
{
public T DoSomethingWith(string s)
{
// ...
}
}
Ideal Umsetzung:
public class MyClass<T>
{
public T DoSomethingWith(string s)
{
// CanBeConvertedFrom would return true if explicit or implicit cast exists
if(!typeof(T).CanBeConvertedFrom(typeof(String))
{
throw new Exception();
}
// ...
}
}
Der Grund, warum ich diese "idealen" Implementierung vorziehen würde, ist in erster Linie, um alle Ts nicht zu zwingen, zu implementieren IConvertibleFrom <> .
Was ist ideal an einer Implementierung, die auf Programmierzeitfehler mit Laufzeitausnahmen reagiert? –
Wenn Sie eine Reihe von Typen haben, die bereits eine Zeichenfolge konvertieren, und Sie diese in einer neuen Klasse/Methode verwenden möchten, wie ich es abstrakt beschrieben habe, wäre dies die Methode mit dem geringsten Aufwand, sie zu implementieren. Es wäre eine Farbe, jeden Typ zu bearbeiten und die neue Schnittstelle zu implementieren. –