Assembly.Load(Assembly) 怎么永远不会为空?

How is the Assembly.Load(Assembly) never null?

在 NET Core 3.1 中

https://docs.microsoft.com/en-us/dotnet/api/system.reflection.assembly.load?view=netcore-3.1#System_Reflection_Assembly_Load_System_Reflection_AssemblyName_

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 值,或者一个异常。