【问题标题】:Passing anonymous type variables as method parameters将匿名类型变量作为方法参数传递
【发布时间】:2012-03-19 06:39:12
【问题描述】:

我有两类 A 和 B,我想通过另一个类中的方法 Separation() 传递 var 类型变量。我做了一些投射,但收到InvalidCastException 错误。请问您知道如何解决这个问题吗?

Class A{
       var products =from u in XDoc.Descendants("product")
            select new
            {
                Urunkod = u.Element("productId"),
                                UrunAdi = u.Element("title"),
            };

         XmlUrun.Separate(products);
       }

Class B{
            internal static void Separate(object products)
            {
                var o2 = CaseByExample(products, new
                {
                    Urunkod = "",
                    UrunAdi = "",
                });
            }
            public static T CaseByExample<T>(this object o, T type)
            {
                return (T)o;
            }
        }  

【问题讨论】:

  • 这将是何时使用dynamic 类型的一个很好的例子???
  • 我不相信您可以使用匿名列表来做到这一点。也许您可以创建一个 DTO 类来包含您的 productId 和 title 值?
  • @dreza:我认为 DTO 会是一个更好的主意。更好的类型安全!

标签: c# types anonymous


【解决方案1】:

匿名类型不能以强方式传递到单个方法的范围之外,因为没有办法在方法的范围之外表示它。

您可以使用dynamic 类型(我不推荐),或者创建一个命名类来表示该类型(我推荐)。

public class A
{
    public void Foo()
    {
        var products =from u in XDoc.Descendants("product")
        select new C
        {
            Urunkod = u.Element("productId"),
                            UrunAdi = u.Element("title"),
        };
    }
}

public class B
{
    public void Bar(IEnumerable<C> cList)
    {
        foreach(var c in cList)
            Console.WriteLine(c.Urunkod);
    }
}

public class C
{
    public XElement Urunkod {get;set;}
    public XElement Urunkadi {get;set;}
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-01
    • 2012-01-11
    • 1970-01-01
    • 1970-01-01
    • 2012-12-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多