2016-06-02 13 views
8

Per farla breve, se faccio questo:Un assembly non ha versione?

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

Will qualcosa di mai essere nullo? Ho letto msdn e non specifica le parti GetName() e Version.

+0

BTW: dovrebbe leggere 'Versione myV = ...', altrimenti non verrà compilato. –

+0

Utilizzando ReSharper su 'Assembly.GetExecutingAssembly() ?. GetName() ?. Version? .Build' suggerisce che i primi due' '' sono ridondanti (vale a dire non possono essere nulli) ma non l'ultimo '?'. –

+1

@UweKeim, come si può ottenere 'null' per' Versione'? – techspider

risposta

4

La versione sarà sempre lì.

Ogni assembly ha un numero di versione come parte della sua identità.

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

A proposito, se si utilizza C# 6, in casi simili, quando non è sicuro su quale metodo restituisce si dovrebbe considerare l'utilizzo di operatore di propagazione nullo "?".. In tal modo si farebbe in modo che non venga mai generato un errore di riferimento null.

Peggiore che potrebbe accadere è che la stringa risultante sarebbe nullo.

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

'La versione sarà sempre lì? Puoi espanderti o esporre qualche documentazione o qualcosa del genere? – Jonesopolis

+0

Quindi il ToString() alla fine non fallirà mai a causa di null? Grazie mille a proposito – Gaspa79

+0

Sì. Il risultato sarebbe nullo. –

5

E 'tecnicamente possibile per quel campo per essere nullo:

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

Ma non riesco a pensare di qualsiasi circostanza in cui si sarebbe essere NULL. Dal momento che è banale da controllare, aggiungerei un controllo null e lanciare un'eccezione personalizzata se appropriato se è è null, dal momento che diagnosticare un NullReferenceException può essere difficile perché non si ottiene alcuna indicazione su quello che è null diverso da la traccia dello stack.

+0

Sono completamente d'accordo con l'approccio per la sicurezza, ero solo curioso perché non riuscivo a trovare queste informazioni da nessuna parte. – Gaspa79

+1

per questo motivo, puoi rendere nulla per qualsiasi cosa. La questione di essere "null" non è assegnando; ma recuperando dall'Assembly – techspider

+0

@techspider True, ma è un controllo così banale che non c'è nulla di male.Preferisco aggiungere due righe di codice che identificano una circostanza completamente eccezionale rispetto a dover tracciare attraverso il codice per diagnosticare una 'NullReferenceException' che _should_ non succederà mai. –

Problemi correlati