Есть класс
public class Param<T>
{
public T Value { get; protected set; }
public byte[] GetBytes()
{
// ...
}
public static T GetInstance(byte[] bytes)
{
// ...
}
}
Он инкапсулирует значение параметра (параметр может быть любого значимого типа, но реально будет uint
, float
и double
). В методе GetBytes
нужно сделать как-то так:
public byte[] GetBytes()
{
return BitConverter.GetBytes(Value);
}
Аналогично нужно сделать и в методе GetInstance
. Понятно, что компилятор такое не пропустит, потому что он пока ничего не знает о типе T.
Вот, как я планирую решить эту проблему:
public byte[] GetBytes()
{
switch (Value)
{
case uint ui:
return BitConverter.GetBytes(ui);
case float f:
return BitConverter.GetBytes(f);
case double d:
return BitConverter.GetBytes(d);
default:
throw new Exception();
}
}
Но эта фича доступна только начиная с C# 7.1. Как можно по-другому обходить все возможные варианты типа? Какой вариант наиболее предпочтителен? Во что разворачивается этот новомодный switch-case?
Виртуальный выделенный сервер (VDS) становится отличным выбором
Есть дерево TreeViewМожно ли к нему добавить таблицу из 1-го столбика? Должно выглядеть примерно как редактирование свойств элемента
есть идея реализации системы распознания лиц, после чего нужно будет сравнивать с уже имеющимися фотографиямиТ
Для программы пишется плагин с использованием WinForms