Re: Generic
От: Sinix  
Дата: 13.01.16 19:40
Оценка: +1
Здравствуйте, Didi, Вы писали:

D>т.е. нужна сериализация в зависимости от типа своя. Или вариант строить такие конструкции с динамическим определением типа?


Текущий вариант будет работать. Если типов много и писать однотипный код не хочется, можно поискать приключений с dynamic.

Почему приключений? А попробуйте угадать вывод вот тут:
        private class A<T>
        {
            private T value;
            public A(T t)
            {
                value = t;
            }
            // каждый тип нужно сериализовать по своему
            public String MyToString()
            {
                return (string)Serialise((dynamic)value);
            }

            private string Serialise(string value)
            {
                return "string";
            }
            private string Serialise(DateTime value)
            {
                return "DateTime";
            }
            private string Serialise(int value)
            {
                return "int";
            }
            private string Serialise(object value)
            {
                return "obj";
            }
        }
        private static void Main()
        {
            try
            {
                Console.WriteLine(new A<int>(23).MyToString());
                Console.WriteLine(new A<byte>(23).MyToString());
                Console.WriteLine(new A<byte?>(23).MyToString());
                Console.WriteLine(new A<long>(23).MyToString());
                Console.WriteLine(new A<int[]>(new[] { 0 }).MyToString());
                Console.WriteLine(new A<string>(null).MyToString());
                Console.WriteLine(new A<Stream>(null).MyToString());
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }

            Console.WriteLine("Done.");
            Console.ReadKey();
        }


Не подходит — или ждать паттерн-матчинга в c#7, или сделать аналог dynamic, только с более строгим биндингом — словарь <Type,Func<object, string>>, пишется за 5 минут.

P.S. А готовые библиотеки сериализации чем не подходят?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.