У меня было несколько методов расширения, таких как ParseInt
, ParseLong
, ParseByte
. теперь я пытаюсь сделать один метод расширения для всех из них. проблема заключается в том, что сделать Default
опционный я должен дать ему значение, как T Default = 0
, но он генерирует ошибку:Значение типа T по умолчанию
A value of type 'int' cannot be used as a default parameter because there are no standard conversions to type 'T'
Если я использую его как T Default = (T)0
то я получаю другую ошибку:
Cannot convert type 'int' to 'T'
Это мой метод расширения:
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; }
}
Не уверен, что можно увидеть точку между использованием 'Parse' или 'ParseInt' в обоих случаях, когда вы должны быть« явным »относительно возвращаемого типа. –
Sehnsucht
@AshkanMobayenKhiabani: Некоторые советы вне темы. ** 1. ** Вместо 'typeof (T) == typeof (int)', вы можете просто сделать 'Default is int'. ** 2. ** Имена параметров обычно начинаются с небольшой буквы. Теперь 'default' уже является ключевым словом C#, но вы все равно можете вызвать свой параметр, выполнив его:' @ default'. Конечно, было бы лучше просто переименовать параметр в defaultValue. – stakx