ich eine Erweiterungsmethode, die ok arbeitet String-Werte in verschiedene Arten zu werfen, die etwa wie folgt aussieht:Allgemeine Methode Rückgabetyp als Typ-Parameter
public static T ToType<T> (this string value, T property)
{
object parsedValue = default(T);
Type type = property.GetType();
try
{
parsedValue = Convert.ChangeType(value, type);
}
catch (ArgumentException e)
{
parsedValue = null;
}
return (T)parsedValue;
}
Ich bin unglücklich über die Art und Weise dies aussieht, wenn Die Methode wird jedoch aufgerufen:
Angabe der Eigenschaft, nur um den Typ der Eigenschaft zu erhalten scheint redundant. Ich würde lieber eine Signatur wie diese verwenden:
public static T ToType<T> (this string value, Type type) { ... }
und haben T enden, um den Typ des Typs zu sein. Dies würde Anrufe viel sauberer:
myObject.someProperty = stringData.ToType(typeof(decimal));
Wenn ich versuche, auf diese Weise zu nennen, jedoch beklagt der Herausgeber, dass der Rückgabetyp der Erweiterung Methode kann nicht von der Nutzung infered werden. Kann ich T mit dem Type-Argument verknüpfen?
Was fehlt mir?
Danke
* Kann ich einen Link T auf dem Typ Argument * - Nicht directly¹. Sie vermischen Kompilierzeit und Laufzeit. Der C# -Compiler muss entscheiden, was "T" ist, wenn er einen Aufruf von "ToType" verarbeitet, während er Ihren Code kompiliert. OTOH 'type 'nimmt bei jedem Aufruf von' ToType' einen anderen Wert an. ------------------------------------------------- -------- ¹ - Sie * können * eine der Aromen der dynamischen Kompilation verwenden, aber es ist eine fortgeschrittene Technik und am besten für die wenigen Fälle reserviert, wenn es wirklich notwendig ist. –
Vielen Dank für die Antworten und die Eingabe. – ZuluAlphaCharlie