Dynamic 动态/匿名类型,返回匿名类型!

Dynamic 动态/匿名类型,返回匿名类型!,dynamic,parameters,types,return,anonymous,Dynamic,Parameters,Types,Return,Anonymous,这不是一个问题,因为我认为它的讨论,我知道你不能跨方法返回匿名类型,当我第一次使用匿名类型时,我认为能够跨方法返回它会非常好。当.net 4问世时,随着动态类型版本的推出,我认为通过动态类型返回匿名类型可能会有希望,如下所示: public static dynamic getCustomer() { ..... var x = from c in customers select new {Fname = c

这不是一个问题,因为我认为它的讨论,我知道你不能跨方法返回匿名类型,当我第一次使用匿名类型时,我认为能够跨方法返回它会非常好。当.net 4问世时,随着动态类型版本的推出,我认为通过动态类型返回匿名类型可能会有希望,如下所示:

      public static dynamic  getCustomer()
    {
        .....
        var x = from c in customers
                select new {Fname = c.FirstName};

        return x;
    }
然后

static void Main(string[] args)
    {
        dynamic x = getCustomer();
        Console.WriteLine(x.First().Fname);
        Console.ReadKey();
    }
但遗憾的是,尽管它很好,但它不起作用

我想原因是:

编译类型中已知的匿名类型,必须包装到运行时已知的类中!,现在匿名类型在编译时携带它们的信息,希望某个类能够将这些信息带到运行时,但是动态类型在编译时是未知的,所以通过动态类型传递匿名类型会迫使匿名类型丢失其信息/智能,我试着调试,我可以得到我想要的数据,但我想它只能在调试模式下工作,或者可能我遗漏了什么

我想知道是否有人让它工作或考虑过它?

您可以返回匿名类型,但不能声明您将这样做。你可以用一根绳子绕过去

代码无法工作的原因与匿名类型无关,而是与动态类型中找不到的扩展方法有关

改为:

Console.WriteLine(Enumerable.First(x).Fname);

我希望它能起作用。

哦,这太棒了,乔恩,非常感谢,所以现在它是可能的!!!我们可以返回匿名类型没有问题!!缺点是我们失去了智能。根据这个问题:该解决方案将抛出一个TypeAccessException。@VincentHubert:在这个问题中,我能看到的唯一一个例外是在DotNetFiddle中,它可能有自己不同的限制。如果你有一个特别的问题,我建议你问一个新问题,给出所有细节。这个代码确实有效。