Здравствуйте, у меня есть следующий класс в C #:
public struct Entry<T> : IEntry
{
public string name;
public int bitlength;
public T Value;
public object GetValue()
{
return Value;
}
public void SetValue(BitArray bitArray, int offset)
{
int i = bitlength;
int count = 0;
ulong number = 0;
Value = default;
while(i > 0)
{
switch(typeof(T).Name)
{
case "Bool":
if (offset < bitArray.Count)
Value = (T)(object)bitArray[offset];
else
Value = (T)(object)false;
break;
case "U":
if (offset + count < bitArray.Count)
{
if (bitArray[offset + count])
{
number |= 1ul << count;
}
if(i == 1)
{
Value = (T)(object)number;
}
}
else
{
Value = (T)(object)number;
break;
}
break;
default:
throw new ApplicationException("Not supported type: " + Value.GetType().AssemblyQualifiedName);
}
count++;
i--;
}
}
}
Проблема здесь в том, что мне нужен класс, который поддерживает получение данных из потока битов и приводит эти биты к объекту типа bool, uint, uint32или uint только с двумя битами, строкой, пользовательскими объектами с интерфейсами и так далее. Я бы предпочел сопоставление с образцом, потому что оно будет соответствовать каждому типу int в одном случае, но это невозможно, потому что по умолчанию для строки или объекта будет ноль, а ноль не будет совпадать с регистром строки. Есть ли способ использовать сопоставление с образцом для этой проблемы, или есть простое решение для решения этой проблемы без использования сопоставления с образцом?