2016-12-27 6 views
4

Ich mache einige schnelle Typumwandlungen in einem Projekt, mit dem ich nicht so vertraut bin.Einfache Möglichkeit, C# Null-Check in einer Typkonvertierung durchzuführen

Sie sehen wie folgt aus:

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

Die Objekte Ich Umwandlung sind in der Regel Objekte Framework-Entity. Ich habe auch nicht die Fähigkeit, die Klassen zu ändern, die ich Form umwandeln werde.

Gibt es eine einfachere Möglichkeit, nach Nullen zu suchen, speziell für Situationen wie diese, in denen eines der Unterobjekte null sein könnte?

OldType.SubType.AnotherSubType.SomeProperty 
+2

Welche Version von .NET (nämlich C#) verwenden Sie? –

+0

C# 5 (.Net 4.5) – AnotherDeveloper

+1

Können Sie den neuen Typ direkt aus 'IQueryable' erstellen? (Ie.projektion) Sie brauchen dann keine Null-Checks. –

Antwort

3

Da C# 6 Sie können die Verwendung 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 ?? "" 
}; 

Wenn Sie eine Klasse wie

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

haben und eine Instanz

Example sample = GetExample(); 

dann dieser Ausdruck:

sample?.Value 

eine Nullable<int> zurückgibt. Und das hat den Wert Value wenn sample nicht null war oder keinen Wert hat (ist null) wenn samplenull war.

+2

Nicht in Ausdrücken obwohl. –

+0

@IvanStoev Recht, vergaß das, vielleicht weil OP nicht explizit erwähnt, dass es in Ausdrücken arbeiten muss. –

+0

Ich benutze Ausdrücke, aber wenn etwas wie Automapper dabei helfen könnte, würde das auch funktionieren. Ich arbeite an einer Anwendung, mit der ich mich in einem Projekt nicht auskenne, und war auf der Suche nach einer einfachen Möglichkeit, kleinere Änderungen mit möglichst geringem Platzbedarf vorzunehmen. – AnotherDeveloper

Verwandte Themen