Честно говоря, учитывая, что вы имеете дело с конечным числом возможных результатов, вы с тем же успехом можете использовать оператор switch. Я бы изменил многое из того, что ты делаешь ...
Во-первых, не выполняйте сложные операции с геттерами или сеттерами. Вы должны выдвинуть это к отдельному методу:
public object Data
{
get
{
return FormatData(_Data);
}
}
Во-вторых, вам не нужно разыгрывать блоки:
case (int)matrix2.enums.NodeTypeEnums.Enums.MultiLineText:
В-третьих,
temp.Count() > 0 ? temp.FirstOrDefault().Data : " "
... здесь есть несколько вопросов, например:
temp.Count() > 0
... приведет к перечислению всего перечисляемого, что гораздо эффективнее сделать:
temp.Any()
... поскольку он вернется после того, как встретит первый элемент, следующий:
temp.FirstOrDefault().Data
если вы звоните .Count() > 0
(или теперь, надеюсь, .Any()
), вы можете изменить это значение на .First()
, так как вы уже установили, что должен существовать экземпляр для его обращения по этому логическому пути. *
temp.FirstOrDefault().Data : " ";
Поскольку ваш метод потенциально возвращает типы, отличные от строки, результат полной третичной операции может быть присвоен только объекту, поскольку компилятор не будет знать, какому типу аргумента он может быть назначен .... представьте, что вы возвращаете Int32
или String
, какой?
UPDATE
Теперь я думаю об этом, действительно важное изменение, которое вы должны сделать, это просто:
public object Data { get; set;}
Свойство действительно должно просто возвращать необработанные данные. Вы должны быть вне проблемной области модели, в которой вы представляете данные (и, следовательно, конвертируете их в другие типы).
Похоже, что вы, по сути, записываете объект в html, так зачем вся работа по его форматированию? По большей части вы можете использовать .ToString()
, чтобы получить строковое представление объекта:
temp.Any() ? temp.First().Data.ToString() : "nbsp;"