Помогите правильно написать ограничение дженерик-метода
От: faa  
Дата: 08.02.14 14:49
Оценка:
Доброго времени суток! Прошу помощи.

Задача:
Написать коллекцию из которой можно извлекать значения по идентификатору без упаковки\распаковки в "System.Object".
Для решения этой задачи пробую использовать дженерик-метод:


        class Program
    {
        static Dictionary<long, byte> _hashByte = new Dictionary<long, byte>();
        static Dictionary<long, bool> _hashBoolean = new Dictionary<long, bool>();
        static Dictionary<long, int> _hashInt32 = new Dictionary<long, int>();
        static Dictionary<long, long> _hashInt64 = new Dictionary<long, long>();
                        
        // Возвращает значение по идентификатору
        public static T GetValue<T>(long id) where T : struct
        {            
            T value = default(T);

            switch (typeof(T).Name)
            {
                case "Byte":
                    value = (T)_hashByte[id];
                    break;
                case "Boolean":
                    value = (T)_hashBoolean[id];
                    break;
                case "Int32":
                    value = (T)_hashInt32[id];
                    break;
                case "Int64":
                    value = (T) _hashInt64[id];
                    break;
            }
            return value;
        }

        static void Main(string[] args)
        {
            long value = GetValue<long>(1);
        }
    }

Получаю сообщение компилятора:
" Cannot convert type 'byte' to 'T' "
" Cannot convert type 'bool' to 'T' "
...

Как правильно написать ограничение на значимый тип?
В идеале нужен дженерик-метод, который может возвращать значения значимых типов C# и ссылочный тип string — такое возможно?

Заранее благодарен!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.