C# 3.0 C#-面试问题匿名类型
最近,我被要求用一行代码来证明C#3.0的威力(可能有点棘手) 我写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
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生成的程序集,并实际分析了生成的是单一类型?从你的评论来看,所有这些问题的答案似乎都是否定的。