У меня есть код, подобный этому:Как это сделать в C# с использованием дженериков
int GetIntValue(string name)
{
string valueString=GetValue(name);
int value=int.Parse(valueString);
return value;
}
double GetDoubleValue(string name)
{
string valueString=GetValue(name);
double value=double.Parse(valueString, System.Globalization.NumberStyles.Any, CultureInfo.InvariantCulture);
return value;
}
и аналогичный код для другого типа числового типа.
Я хочу написать что-то такое, как это:
T getValue<T>(string name)
{
string valueString=GetValue(name);
T value=T.Parse(valueString, System.Globalization.NumberStyles.Any, CultureInfo.InvariantCulture);
return value;
}
Но он не работает (T является слишком общим). Как изменить этот код, чтобы использовать generic в C#?
Я использую .NET 4.
редактироватькоды неподвижных удалить опечатки.
здесь что-то интересное: http://answers.yahoo.com/question/index?qid=20111020084257AAtB8qA – wudzik
Поскольку первая строка такая же, вы на самом деле спрашиваете, как вызвать Parse без предоставления конкретного типа, но ожидайте, что результат будет конкретным типом? Даже если бы вы могли, вам все равно пришлось бы передать аргумент типа, например 'getValue (value)'. Почему бы просто не называть 'double.ToParse' в первую очередь? –
Вы будете торговать несколькими функциями с общим с помощью типа 'switch/case' внутри (на самом деле не одного, но своего рода), где вы должны проверять * все типы *, которые имеют уникальный' Parse' (или, возможно, если вы можете сами разобрать их) и назовите его для этого типа. Другая возможность может быть отражением, когда вы проверяете, имеет ли этот тип метод 'Parse' и каким-то образом его называют. – Sinatr