Это, вероятно, не возможно, но у меня есть этот класс:
public class Metadata<DataType> where DataType : struct
{
private DataType mDataType;
}
Это еще не все, но давайте будем простыми. Универсальный тип (DataType) ограничен типами значений оператором where. То, что я хочу сделать, это иметь список этих объектов метаданных различных типов (DataType). Такие как:
List<Metadata> metadataObjects;
metadataObjects.Add(new Metadata<int>());
metadataObjects.Add(new Metadata<bool>());
metadataObjects.Add(new Metadata<double>());
Это вообще возможно?
List<object>
? Они не прекратят боксировать / распаковывать, не убирают необходимость в кастинге, и, в конечном счете, вы получаетеMetadata
объект, который ничего не говорит вам о реальномDataType
, я искал решение для решения этих проблем. Если вы собираетесь объявить интерфейс / класс, просто для того, чтобы иметь возможность поместить реализующий / производный универсальный тип в универсальный список, насколько он отличается от использованияList<object>
другого, отличного от бессмысленного слоя?List<Metadata<object>>
делает трюк.struct
ограничение, оно здесь не работает. СмотритеMetaData
ссылочных типов вместо ваших исходных типов значений без информации о времени компиляции (времени компиляции), что фактически является «упаковкой».Ответы:
источник
List<object>
? пожалуйста, посмотрите на мой комментарий, опубликованный под вопросом ОП.После ответа Леппи, почему бы не сделать
MetaData
интерфейс:источник
Я также использовал неуниверсальную версию, используя
new
ключевое слово:Явная реализация интерфейса используется, чтобы позволить обоим
Data
членам:Вы можете получить версию с таргетингом на типы значений:
Это может быть распространено на любые общие ограничения.
источник
DataType
и оченьobject Data
помогли)Deserialize<metadata.DataType>(metadata.Data);
. Это говорит мне, что не может разрешить метаданные символа . Как получить DataType, чтобы использовать его для универсального метода?