2016-12-27 1 views
4

Я делаю некоторые быстрые преобразования типов в проекте, о котором я не очень хорошо знаком.Простой способ выполнить C# Null Проверка преобразования типов

Они выглядят примерно так:

var NewType = new 
{ 
    NewTypeId = old.SubType == null ? 0 : old.SubType.SubTypeId ?? 0, 
    OtherType = old.OtherType ?? "", 
    Review = old.CustomerComments ?? "", 
    Country = old.Country == null ? "" : old.Country.Abbreviation ?? "", 
    Customer = old.SubType == null ? "" : 
        old.SubType.Customer == null ? "" : 
         old.SubType.Customer.Name ?? "" 
}; 

Объектов Я превращающие обычно Entity Framework объекты. У меня также нет возможности изменять классы, которые я буду преобразовывать.

Есть ли более простой способ проверки нулей, в частности, для ситуаций, подобных этому, когда любой из под-объектов может быть пустым?

OldType.SubType.AnotherSubType.SomeProperty 
+2

Какую версию .NET (а именно C#) вы используете? –

+0

C# 5 (.Net 4.5) – AnotherDeveloper

+1

Можете ли вы создать новый тип непосредственно из 'IQueryable'? (I.e. project) Тогда вам не понадобятся нулевые проверки. –

ответ

3

Поскольку C# 6 вы можете использовать null-propagation/null-conditional operator:

var NewType = new 
{ 
    NewTypeId = old.SubType?.SubTypeId ?? 0, 
    OtherType = old.OtherType ?? "", 
    Review = old.CustomerComments ?? "", 
    Country = old.Country?.Abbreviation ?? "", 
    Customer = old.SubType?.Customer?.Name ?? "" 
}; 

Если у вас есть класс, как

public class Example 
{ 
    public int Value {get; set;} 
} 

и экземпляр

Example sample = GetExample(); 

то это выражение:

sample?.Value 

возвращает Nullable<int>. И это имеет значение Value, если sample не было null или не имеет значения (is null), если sample был null.

+2

Не в выражениях. –

+0

@ IvanStoev прав, забыл, может быть, потому, что OP явно не упоминал, что он должен работать в выражениях. –

+0

Я использую выражения, но если что-то вроде Automapper может помочь в этом, это тоже сработает. Я работаю над приложением, с которым я не знаком в конце проекта, и искал простой способ внести некоторые незначительные дополнительные изменения с максимально возможной площадью. – AnotherDeveloper

Смежные вопросы