2016-06-02 7 views
8

Lange Rede kurzer Sinn, wenn ich dies tun:Kann eine Baugruppe keine Version haben?

string myV = Assembly.GetExecutingAssembly().GetName().Version.ToString(); 

Will etwas jemals null sein? Ich lese das msdn und es spezifiziert nicht GetName() und Version Teile.

+0

BTW: Es sollte 'Version myV = ...' lesen, sonst wird es nicht kompilieren. –

+0

Mit ReSharper auf 'Assembly.GetExecutingAssembly()? GetName() ?. Version? .Build' schlägt es vor, dass die ersten beiden'? 'Redundant sind (d. H. Nicht null sein können), aber nicht das letzte'? '. –

+1

@Uwekeim, wie kann man 'null' für' Version' bekommen? – techspider

Antwort

4

Version wird immer da sein.

Jede Baugruppe hat eine Versionsnummer als Teil ihrer Identität.

https://msdn.microsoft.com/en-us/library/51ket42z(v=vs.110).aspx

By the way, wenn Sie C# 6, in ähnlichen Fällen verwenden, wenn es nicht sicher, welche Methode zurückgibt, sollten Sie mit null propogation Operator betrachten? "". Auf diese Weise stellen Sie sicher, dass es niemals einen Null-Referenzfehler auslöst.

Das Schlimmste, was passieren könnte, ist, dass die resultierende Zeichenfolge null wäre.

string myV = Assembly.GetExecutingAssembly()?.GetName()?.Version?.ToString(); 
+1

'Version wird immer da sein 'können Sie das weiter ausführen oder auf Dokumentation oder etwas anderes hinweisen? – Jonesopolis

+0

Also wird die ToString() am Ende nie wegen Null fehlschlagen? Vielen Dank übrigens – Gaspa79

+0

Ja. Das Ergebnis wäre einfach null. –

5

Es ist technisch möglich für dieses Feld null zu sein:

var name = Assembly.GetExecutingAssembly().GetName(); 
name.Version = null; 
Console.WriteLine(name.Version == null); // true 

Aber ich kann es nicht glauben, von irgendwelchen Umständen, in denen null sein würde. Da es trivial ist zu überprüfen, würde ich einfach eine Null-Prüfung hinzufügen und eine benutzerdefinierte Ausnahme auslösen, wenn es Null ist, da die Diagnose einer NullReferenceException kann schwierig sein, weil Sie keinen Hinweis auf erhalten, was ist null andere als die Stapelverfolgung.

+0

Ich stimme dem Wesen-Sicher-Ansatz völlig zu, ich war nur neugierig, weil ich diese Information nirgendwo finden konnte. – Gaspa79

+1

dafür können Sie null für alles machen. Die Frage nach dem "Null" ist nicht durch Zuweisen; aber durch Abrufen von Assembly – techspider

+0

@techspider True, aber es ist so eine triviale Kontrolle, es ist kein Schaden daran.Ich würde eher zwei Zeilen Code hinzufügen, die einen völlig außergewöhnlichen Umstand identifizieren, als durch Code zu verfolgen, um eine 'NullReferenceException' zu diagnostizieren, die _nicht passieren sollte. –

Verwandte Themen