Ich hatte mehrere Erweiterungsmethoden wie ParseInt
, ParseLong
, ParseByte
. jetzt versuche ich eine einzige Erweiterungsmethode für alle von ihnen zu machen. das Problem ist, dass der Default
Parameter optional machen ich es einen Wert wie T Default = 0
geben, aber es erzeugt den Fehler:T Typ Standardwert
A value of type 'int' cannot be used as a default parameter because there are no standard conversions to type 'T'
Wenn ich es wie T Default = (T)0
verwenden dann bekomme ich einen anderen Fehler:
Cannot convert type 'int' to 'T'
Das ist meine Erweiterungsmethode:
public static T Parse<T>(this string x, T Default = 0)
{
Type type = typeof(T);
if(type == typeof(int))
{ if(!string.IsNullOrEmpty(x) int.TryParse(x , out Defualt); return Default; }
}
nicht sicher, den Punkt zwischen der Verwendung von 'Parse 'oder' ParseInt' in beiden Fällen zu sehen, müssen Sie "explizit" über den Rückgabetyp sein –
Sehnsucht
@AshkanMobayenKhiabani: Einige off-topic Tipps. ** 1. ** Anstelle von 'typeof (T) == typeof (int)' könnte man einfach 'Default is int 'wählen. ** 2. ** Parameternamen beginnen normalerweise mit einem kleinen Buchstaben. Nun ist 'default' bereits ein C# -Schlüsselwort, aber Sie können Ihren Parameter immer noch aufrufen, indem Sie ihn umgehen:' @ default'. Natürlich könnte es auch angenehmer sein, den Parameter stattdessen in 'defaultValue' umzubenennen. – stakx