2016-12-27 69 views
4

我在项目中进行了一些快速类型转换,我对此不太熟悉。在类型转换中执行C#空值检查的简单方法

它们看起来与此类似:

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 ?? "" 
}; 

我转换对象通常是实体框架的对象。我也没有能力修改我将要转换的类。

有没有更简单的方法来检查空值,特别是对于这样的情况下,任何子对象可能为空?

OldType.SubType.AnotherSubType.SomeProperty 
+2

您使用的是什么版本的.NET(即C#)? –

+0

C#5(.Net 4.5) – AnotherDeveloper

+1

您可以直接从'IQueryable'创建新类型吗? (即投影)然后你不需要空检查。 –

回答

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或没有价值(是null)如果samplenull

+2

虽然不在表达式中。 –

+0

@IvanStoev对,忘了,也许是因为OP没有明确提到它需要在表达式中工作。 –

+0

我正在使用表达式,但如果像Automapper这样的东西可以帮助解决这个问题,那也可以。我正在研究一个我在项目后期不熟悉的应用程序,并正在寻找一种简单的方法,以尽可能小的占用空间进行一些小的辅助更改。 – AnotherDeveloper

相关问题