如何访问声明范围之外的匿名类型的对象?
例如
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; }
正如其他答案所指出的那样, 您实际上不应该这样做 。但是,如果您坚持要这样做,那么就有一个令人讨厌的骇客,称为“以示例为例”,可以帮助您做到这一点。在这里和这里的几篇文章中都提到了该技术。
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; }
(尽管其中一篇文章的作者说他也不想与之联系,但我不能为这种黑客行为而赞誉。他的名字可能很熟悉。)