C # - Интервью Вопрос Аноним Тип - PullRequest
1 голос
/ 14 апреля 2010

Недавно меня попросили доказать мощь C # 3.0 в одной строке (может быть, сложно)

я написал

new int[] { 1, 2, 3 }.Union(new int[]{10,23,45}).
ToList().ForEach(x => Console.WriteLine(x));

и объяснил, что вы можете иметь (i) анонимный массив (ii) метод расширения (iii) лямбда и замыкание в одной строке. Я получил предложение спот.

Но .....

Интервьюер спросил меня how will you convert an anonymous type into known type :(

Я объяснил

public class Product
{
    public double ItemPrice { private set; get; }
    public string ItemName { private set; get; }
}


var anony=new {ItemName="xxxx",ItemPrice=123.56};

Вы не можете назначить product a=anony;

Интервьюер ответил, что вероятность сделать это составляет 200%. если у вас есть небольшая работа вокруг. Я был невежественен.

Как обычно, я жду вашего ценного ответа (возможно ли это?).

Ответы [ 4 ]

1 голос
/ 15 апреля 2010

Вы правы, вы не можете выполнить это задание:

product a=anony;

MSDN: Анонимные типы (Руководство по программированию в C #)

Анонимный тип не может быть приведен к любой интерфейс или тип, кроме объект.

0 голосов
/ 17 июня 2013
var list = anony.Select(x=> new Product {
               ItemPrice = x.ItemPrice, ItemName = x.ItemName }).ToList();
0 голосов
/ 22 декабря 2010

Может быть, попробуйте примеры, показанные здесь .. они пытаются сделать что-то подобное ..

http://www.codeproject.com/KB/linq/AnonymousTypeTransform.aspx

http://www.inflecto.co.uk/Inflecto-Blog/post/2009/11/12/IQueryable-Sorting-Paging-Searching-and-Counting.aspx

0 голосов
/ 15 апреля 2010

Может быть, что-то вроде этого:

class Program
{
    static T Cast<T>(object target, T example)
    {
        return (T)target;
    }

    static object GetAnon()
    {
        return new { Id = 5 };
    }

    static void Main()
    {
        object anon = GetAnon();
        var p = Cast(anon, new { Id = 0 });
        Console.WriteLine(p.Id);
    }
}

Примечание: никогда писать или полагаться на такой код.

...