C# 3.0 C#-面试问题匿名类型

C# 3.0 C#-面试问题匿名类型,c#-3.0,language-features,C# 3.0,Language Features,最近,我被要求用一行代码来证明C#3.0的威力(可能有点棘手) 我写 new int[] { 1, 2, 3 }.Union(new int[]{10,23,45}). ToList().ForEach(x => Console.WriteLine(x)); 并解释说你可以(i)匿名数组(ii)扩展方法(iii)lambda和闭包都在一行中。我得到了现货报价 但是 面试官问我如何将匿名类型转换为已知类型:( 我解释说 public class Product { public d

最近,我被要求用一行代码来证明C#3.0的威力(可能有点棘手)

我写

new int[] { 1, 2, 3 }.Union(new int[]{10,23,45}).
ToList().ForEach(x => Console.WriteLine(x));
并解释说你可以(i)匿名数组(ii)扩展方法(iii)lambda和闭包都在一行中。我得到了现货报价

但是

面试官问我
如何将匿名类型转换为已知类型:(

我解释说

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


var anony=new {ItemName="xxxx",ItemPrice=123.56};
您不能分配
产品a=anony;

面试官回答说有200%的机会这样做 如果你有一个小工作的话。我是无知的


像往常一样,我在等待你宝贵的答复(可能吗?)

你说得对,你不能做这个任务:

product a=anony;
MSDN:

无法将匿名类型强制转换为 任何接口或类型,除了 反对


你说得对,你不能做这个任务:

product a=anony;
MSDN:

无法将匿名类型强制转换为 任何接口或类型,除了 反对


也许是这样的:

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);
    }
}
类程序
{
静态T转换(对象目标,T示例)
{
返回(T)目标;
}
静态对象GetAnon()
{
返回新的{Id=5};
}
静态void Main()
{
object anon=GetAnon();
var p=Cast(anon,new{Id=0});
控制台写入线(p.Id);
}
}

备注:永远不要写或依赖这样的代码。

可能是这样的:

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);
    }
}
类程序
{
静态T转换(对象目标,T示例)
{
返回(T)目标;
}
静态对象GetAnon()
{
返回新的{Id=5};
}
静态void Main()
{
object anon=GetAnon();
var p=Cast(anon,new{Id=0});
控制台写入线(p.Id);
}
}

备注:永远不要写或依赖这样的代码。

可以尝试这里的示例。他们尝试做类似的事情


可以尝试下面的示例。他们尝试做类似的事情


我知道这个黑客攻击,甚至不会考虑向任何人展示它。我在这个例子中没有看到一个关闭:-我知道这个黑客攻击,甚至不会考虑向任何人展示它。我在这个例子中没有看到一个关闭:-不,我认为这不会起作用。虽然这两种匿名类型的结构相同,但它们仍然是不同的类型。@以防万一,您是否真的测试了这个示例,或者您是从您的头脑中假设了一些事情?这两种类型将与编译器生成和重用的类型完全相同。你认为如果这是两种不同的类型,演员阵容是可能的吗?你知道在.NET中铸造是如何工作的吗?您是否打开了使用reflector生成的程序集,并实际分析了生成的是单一类型?从你的评论来看,所有这些问题的答案似乎都是否定的。不,我认为这行不通。虽然这两种匿名类型的结构相同,但它们仍然是不同的类型。@以防万一,您是否真的测试了这个示例,或者您是从您的头脑中假设了一些事情?这两种类型将与编译器生成和重用的类型完全相同。你认为如果这是两种不同的类型,演员阵容是可能的吗?你知道在.NET中铸造是如何工作的吗?您是否打开了使用reflector生成的程序集,并实际分析了生成的是单一类型?从你的评论来看,所有这些问题的答案似乎都是否定的。