编译器警告(等级 1)CS1690

访问“member”上的成员会导致运行时异常,因为它是引用封送类的字段

尝试调用派生自 MarshalByRefObject 的类的成员上的方法、属性或索引器且成员是值类型时,会出现此警告。 在应用程序域中,继承自 MarshalByRefObject 的对象通常打算以引用方式封送。 如果任何代码曾尝试在应用程序域中直接访问此类对象的值类型成员,会发生运行时 InvalidOperationException。 要解决此警告,首先将该成员复制到本地变量中,然后在该变量上调用方法。

下面的示例生成 CS1690:

// CS1690.cs  
using System;

class WarningCS1690 : MarshalByRefObject
{
    int i = 5;

    public static void Main()
    {
        AppDomain domain = AppDomain.CreateDomain("MyDomain");
        Type t = typeof(WarningCS1690);
        WarningCS1690 e = (WarningCS1690)domain.CreateInstanceAndUnwrap(t.Assembly.FullName,t.FullName);

        e.i.ToString(); // CS1690

        // OK  
        int i = e.i;
        i.ToString();
        e.i = i;
    }
}