2

在下面的示例中,x.propertyX工作正常,而y.propertyX给了我一个Microsoft.CSharp.RuntimeBinder.RuntimeBinderException,抱怨 'propertyX' 没有在 'object' 中定义。

Program 类中的 CreateDynamic 方法(如下所示)和 Class1 中的方法(未显示)完全相同,但 Class1 与 Program 位于不同的项目中。如果我将 Class1 移到 Program 的项目中,一切正常。

class Program
{
    public static object CreateDynamic()
    {
        return new { propertyX = "asdf" };
    }

    static void Main(string[] args)
    {
        dynamic x = CreateDynamic();
        Console.WriteLine(x.propertyX);

        dynamic y = Class1.CreateDynamic();
        Console.WriteLine(y.propertyX);

我需要做什么才能使匿名类型在 dll 中作为动态类型工作 - 还是不可能?

更新: Fwiw,我发现我可以使用 ExpandoObjects 解决这个问题,然后我将其“转换”为动态,但与

new { key1 = val1, key2 = val2 }

匿名类型提供的样式。

4

1 回答 1

1

匿名类型是在其中创建它们的程序集内部的。如果您可以控制源代码,则可以使它们成为Friend Assemblies

[assembly:InternalsVisibleTo("TheOtherAssembly")]

但也有弊端

于 2011-10-05T07:35:39.203 回答