【问题标题】:Dynamic/Anonymous type, returning anonymous types!动态/匿名类型,返回匿名类型!
【发布时间】:2010-08-02 09:36:47
【问题描述】:

这不是一个问题,因为我认为它的讨论,我知道你不能跨方法返回匿名类型,当我第一次使用匿名类型时,我认为能够跨方法返回它真的很好,当 .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();
    }

但遗憾的是,尽管编译得很好,但它不起作用,

我猜原因是:

在编译类型中已知的匿名类型必须包装到在运行时已知的类中!现在匿名类型在编译时携带它们的信息,希望某些类会来并将这些信息带到运行时,但动态类型在编译时间,所以通过动态类型传递匿名类型会强制匿名类型丢失其信息/智能,我尝试调试,我可以得到我想要的数据,但我猜它只能在调试模式下工作,或者我可能遗漏了一些东西。

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

【问题讨论】:

    标签: dynamic parameters types return anonymous


    【解决方案1】:

    可以返回一个匿名类型,你只是不能声明你会这样做。你可以通过horrible hack 来解决它。

    您的代码不起作用的原因与匿名类型无关 - 它与动态类型中找不到的扩展方法有关。

    改为:

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

    我希望它会起作用。

    【讨论】:

    • 啊,乔恩太棒了,非常感谢,所以现在可以了!!!我们可以返回匿名类型没问题!!缺点是我们失去了智能。
    • 根据这个问题:stackoverflow.com/questions/25068965/… 该解决方案将抛出 TypeAccessException。
    • @VincentHubert:我在该异常问题中看到的唯一提及是在 DotNetFiddle 中,它可能有自己不同的限制。如果您遇到特定问题,我建议您提出一个新问题,提供所有详细信息。此代码确实有效。
    猜你喜欢
    • 2010-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-21
    • 1970-01-01
    • 1970-01-01
    • 2014-05-29
    • 1970-01-01
    相关资源
    最近更新 更多