Я хотел бы создать расширение Split, которое позволит мне разбить любую строку на строго типизированный список. У меня есть начало, но поскольку я собирался повторно использовать это во многих проектах, я хотел бы получить информацию от сообщества (и поэтому вы можете добавить его в свой собственный набор инструментов;) Любые идеи отсюда?Расширение строки с общим типом?
public static class Converters
{
public static IEnumerable<T> Split<T>(this string source, char delimiter)
{
var type = typeof(T);
//SPLIT TO INTEGER LIST
if (type == typeof(int))
{
return source.Split(delimiter).Select(n => int.Parse(n)) as IEnumerable<T>;
}
//SPLIT TO FLOAT LIST
if (type == typeof(float))
{
return source.Split(delimiter).Select(n => float.Parse(n)) as IEnumerable<T>;
}
//SPLIT TO DOUBLE LIST
if (type == typeof(double))
{
return source.Split(delimiter).Select(n => double.Parse(n)) as IEnumerable<T>;
}
//SPLIT TO DECIMAL LIST
if (type == typeof(decimal))
{
return source.Split(delimiter).Select(n => decimal.Parse(n)) as IEnumerable<T>;
}
//SPLIT TO DATE LIST
if (type == typeof(DateTime))
{
return source.Split(delimiter).Select(n => DateTime.Parse(n)) as IEnumerable<T>;
}
//USE DEFAULT SPLIT IF NO SPECIAL CASE DEFINED
return source.Split(delimiter) as IEnumerable<T>;
}
}
Вы должны/могли бы использовать else, если вместо нескольких одиночных операторов if. Только один будет соответствовать. – mfussenegger
@mfussenegger: Поскольку каждый блок 'if' содержит оператор' return', то 'else' становится избыточным. – Douglas
IMO, если ваш общий метод основан на тестировании типа общего параметра, то он, вероятно, не является хорошим кандидатом для дженериков. – spender