Доброго времени суток! Прошу помощи.
Задача:
Написать коллекцию из которой можно извлекать значения по идентификатору без упаковки\распаковки в "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 — такое возможно?
Заранее благодарен!