Передача переменных анонимного типа в качестве параметров метода - PullRequest
2 голосов
/ 19 марта 2012

У меня есть два класса A & B, я хочу передать переменную типа var с помощью метода Separation(), который находится в другом классе.Я провожу кастинг, но получаю ошибку 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;
            }
        }  

1 Ответ

2 голосов
/ 06 июня 2012

Анонимный тип не может быть строго передан за пределы отдельного метода, потому что нет способа представить его за пределами метода.

Вы можете использовать тип 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;}
}
...