Assembly.Load(Assembly) 怎么永远不会为空?
How is the Assembly.Load(Assembly) never null?
在 NET Core 3.1 中
Assembly.Load(Assembly) 的 return 值如何永不为空?我收到的代码提示是表达式 (Assembly.Load(Assembly) != null
) 始终为真。 Assembly 是引用类型吗?
if (env.IsDevelopment())
{
var appAssembly = Assembly.Load(new AssemblyName(env.ApplicationName));
if (appAssembly != null)
{
config.AddUserSecrets(appAssembly, optional: true);
}
}
.NET 核心:
那是因为这里静态代码分析source code, which effectively tells the compiler this value is not null. See documentation中的这一行。
return retAssembly!;
所以你会得到一个非空值或异常。
.NET 框架:
那是因为 source code 有合约:
public static Assembly Load(AssemblyName assemblyRef)
{
Contract.Ensures(Contract.Result<Assembly>() != null);
//More code
}
因此您将得到一个非空 return 值,或者一个异常。
在 NET Core 3.1 中
Assembly.Load(Assembly) 的 return 值如何永不为空?我收到的代码提示是表达式 (Assembly.Load(Assembly) != null
) 始终为真。 Assembly 是引用类型吗?
if (env.IsDevelopment())
{
var appAssembly = Assembly.Load(new AssemblyName(env.ApplicationName));
if (appAssembly != null)
{
config.AddUserSecrets(appAssembly, optional: true);
}
}
.NET 核心:
那是因为这里静态代码分析source code, which effectively tells the compiler this value is not null. See documentation中的这一行。
return retAssembly!;
所以你会得到一个非空值或异常。
.NET 框架:
那是因为 source code 有合约:
public static Assembly Load(AssemblyName assemblyRef)
{
Contract.Ensures(Contract.Result<Assembly>() != null);
//More code
}
因此您将得到一个非空 return 值,或者一个异常。