Хочу напистаь функцию которая разбивала бы строку в лист строк или целых.
public static List<T> ParseArrayString<T>(string s)
{
if ((s==null) || (s.Length==0)) return null;
string[] strings = s.Split(new char[] { ',' });
List<T> list = new List<T>();
Type t=typeof(T);
foreach (string var in strings)
{
if (t.Name == "Int32")
{
int value;
if (int.TryParse(var, out value))
list.Add((T)value);
else
throw new ArgumentException(string.Format("Wrong value : {0}", var));
}
else
{
list.Add((T)var);
}
}
return list;
}
Компилироваться код не хочет , да и вообще возможно ли такое ?
данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Это пример вызова функции
List<int> lst=Encrypt.ParseArrayString<int>("2,5,7");
данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Здравствуйте, nebelung, Вы писали:
N>Компилироваться код не хочет , да и вообще возможно ли такое ?
О типе T ничего не известно, посему приведение к нему выполнить не возможно. Можно заменить на as, но в этом случае T должен быть ссылочным типом.
Посмотрите на такой вариант решения схожей задачи:
int[] arrayOfInts = Array.ConvertAll<string, int>(
new string[]{"1", "2"},
delegate(string str){ return Int32.Parse(str);});
Возможно полчучиться сделать по аналогии... используя делегат более подходящий для конкретного типа.
Задачу решил так
list.Add((T)t.InvokeMember("Parse",
BindingFlags.Static | BindingFlags.Public | BindingFlags.InvokeMethod, null, null, new string[] { var }));
если тип имеет метод парс ежели ето стринг то
list.Add((T)t.InvokeMember("Copy",
BindingFlags.Static | BindingFlags.Public | BindingFlags.InvokeMethod, null, null, new string[] { var }));
данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Как из пушки по воробьям.
Для такой задачи — reflection emitters...
данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
В принципе можно вот так извратиться:
(T)(object)var
данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Здравствуйте, nebelung, Вы писали:
N>Хочу напистаь функцию которая разбивала бы строку в лист строк или целых.
Дженерики не отменяют нужды уметь пользоваться базовыми возможностями платформы.
public static class ConvertHelper<T>
{
private static TypeConverter _converter = TypeDescriptor.GetConverter(typeof(T));
public static List<T> ParseArrayString(string s)
{
if (string.IsNullOrEmpty(s))
return null;
string[] strings = s.Split(',');
List<T> list = new List<T>();
foreach (string var in strings)
list.Add((T)_converter.ConvertFromString(var));
return list;
}
}

1.1.4 stable rev. 510