У меня есть объект, у которого есть свойства другого объекта, который называется DataValue
, но тип, который я хочу DataValue
, зависит от информации, содержащейся в объекте в другом свойстве. Я не уверен, что мой путь - лучший способ сделать это.
У меня есть этот бизнес-объект, который называется AssetStructure.
Объект AssetStructure содержит общий список объектов IAssetStructureField, представляющих собой серию объектов, которые в основном содержат информацию о данных, которые могут храниться в этом поле, значение по умолчанию определенного типа данных и некоторые отображаемые информационные свойства. Каждый из объектов, реализующих интерфейс IAssetStructureField, будет содержать разные типы данных. Например, один тип DefaultValue может быть строкой, а другой - List<ofCustomType>
.
У меня есть объект Asset, содержащий общий список объектов, который называется AssetDataField. AssetDataField имеет свойства одного, содержащего AssetStructureField, и одного, называемого DataValue, данных актива для этого StructureField.
Моя проблема связана с типом свойства AssetDataField DataValue, оно должно быть другим в зависимости от деталей объекта AssetStructureField. Этот StructureField может содержать данные, представляющие все группы пользователей с доступом к Активу (тип данных List<UserGroups>
), а другой может быть просто полем описания (строка типа данных), поэтому мне нужно, чтобы DataValue, выходящий из AssetDataField, был одинаковым типа.
То, что я думаю сейчас сделать, и что я чувствую, что, вероятно, можно сделать гораздо лучше, это заставить AssetDataField.DataValue вернуть объект, а затем привести его к типу AssetDataField.StructureField.DefaultValue.
object fieldValue;
object fieldDefaultValue;
Asset certainAsset = new Asset(32423);
foreach (AssetDataField dataField in certainAsset.DataFields)
{
fieldDefaultValue = datafield.StructureField.DefaultValue;
fieldValue = datafield.DataValue as typeof(fieldDefaultValue);
// then do stuff depending on what typeof(fieldValue) is. This is where I
// see things getting particularly ugly. Not only just because that
// this class here will need to know the possible types that may be
// returned, so it can deal.
if (typeof(fieldValue) == whatever)
{
// deal;
}
else if (typeof(fieldValue) == whatever2)
{
// deal differently;
}
}
У кого-нибудь есть предложения? Я вовсе не против полного повторения. Мне очень жаль, что это так скучно, я просто хотел попытаться объяснить ситуацию хорошо. Я пытался составить диаграмму UML, чтобы помочь, но мой ArgoUML действовал. Спасибо за любые идеи, которые вы можете предоставить.