Помогите с generic-ами
От: Аноним  
Дата: 18.01.06 06:35
Оценка:
Хочу напистаь функцию которая разбивала бы строку в лист строк или целых.

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
ссылка на оригинальное сообщение
Помогите с generic-ами
От: Аноним  
Дата: 18.01.06 06:37
Оценка:
Это пример вызова функции
List<int> lst=Encrypt.ParseArrayString<int>("2,5,7");



данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re: Помогите с generic-ами
От: Alex Leshkin  
Дата: 20.01.06 12:36
Оценка:
Здравствуйте, nebelung, Вы писали:



N>Компилироваться код не хочет , да и вообще возможно ли такое ?

О типе T ничего не известно, посему приведение к нему выполнить не возможно. Можно заменить на as, но в этом случае T должен быть ссылочным типом.

Посмотрите на такой вариант решения схожей задачи:

int[] arrayOfInts = Array.ConvertAll<string, int>(
                        new string[]{"1", "2"}, 
                        delegate(string str){ return Int32.Parse(str);});

Возможно полчучиться сделать по аналогии... используя делегат более подходящий для конкретного типа.
Re: Помогите с generic-ами
От: Аноним  
Дата: 20.01.06 12:59
Оценка:
Задачу решил так
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
ссылка на оригинальное сообщение
Re: Помогите с generic-ами
От: Аноним  
Дата: 26.01.06 06:01
Оценка:
Как из пушки по воробьям.
Для такой задачи — reflection emitters...


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re: Помогите с generic-ами
От: Аноним  
Дата: 26.01.06 07:08
Оценка:
В принципе можно вот так извратиться:

(T)(object)var
SUNETA Мой блог


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re: Помогите с generic-ами
От: Sinclair Россия https://github.com/evilguest/
Дата: 31.01.06 10:11
Оценка:
Здравствуйте, 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
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.