长话短说,如果我这样做:
string myV = Assembly.GetExecutingAssembly().GetName().Version.ToString();
Run Code Online (Sandbox Code Playgroud)
有些东西会无效吗?我读了msdn,它没有指定GetName()和Version部分.
从技术上讲,该字段可能为null:
var name = Assembly.GetExecutingAssembly().GetName();
name.Version = null;
Console.WriteLine(name.Version == null); // true
Run Code Online (Sandbox Code Playgroud)
但我想不出在任何情况下将是空的.因为检查我只是简单地添加一个空检查并在适当的情况下抛出一个自定义异常,如果它是 null,因为诊断a NullReferenceException可能很困难,因为除了堆栈跟踪之外你没有得到任何关于 null的指示.
版本永远存在。
每个程序集都有一个版本号作为其标识的一部分。
https://msdn.microsoft.com/en-us/library/51ket42z(v=vs.110).aspx
顺便说一句,如果您使用 C#6,在类似情况下,当不确定方法返回什么时,您应该考虑使用空传播运算符“?.”。通过这样做,您将确保它永远不会抛出空引用错误。
最糟糕的情况是结果字符串将为空。
string myV = Assembly.GetExecutingAssembly()?.GetName()?.Version?.ToString();
Run Code Online (Sandbox Code Playgroud)