Ali*_*zmi 12 c# anonymous-types
如何访问其声明范围之外的匿名类型的对象?
例如
void FuncB()
{
var obj = FuncA();
Console.WriteLine(obj.Name);
}
??? FuncA()
{
var a = (from e in DB.Entities
where e.Id == 1
select new {Id = e.Id, Name = e.Name}).FirstOrDefault();
return a;
}
Run Code Online (Sandbox Code Playgroud)
Luk*_*keH 27
正如其他答案所述,你真的不应该这样做.但是,如果你坚持,那么有一个令人讨厌的黑客被称为"通过示例铸造",这将允许你这样做.这里和这里有几篇文章中提到了这种技术.
public void FuncB()
{
var example = new { Id = 0, Name = string.Empty };
var obj = CastByExample(FuncA(), example);
Console.WriteLine(obj.Name);
}
private object FuncA()
{
var a = from e in DB.Entities
where e.Id == 1
select new { Id = e.Id, Name = e.Name };
return a.FirstOrDefault();
}
private T CastByExample<T>(object target, T example)
{
return (T)target;
}
Run Code Online (Sandbox Code Playgroud)
(虽然其中一篇文章的作者说他也不想与之相关联,但我不能因此而受到赞誉.他的名字可能很熟悉.)