小编典典

访问C#匿名类型对象

c#

如何访问声明范围之外的匿名类型的对象?

例如

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;
}

阅读 379

收藏
2020-05-19

共1个答案

小编典典

正如其他答案所指出的那样, 您实际上不应该这样做
。但是,如果您坚持要这样做,那么就有一个令人讨厌的骇客,称为“以示例为例”,可以帮助您做到这一点。在这里这里的几篇文章中都提到了该技​​术。

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;
}

(尽管其中一篇文章的作者说他也不想与之联系,但我不能为这种黑客行为而赞誉。他的名字可能很熟悉。)

2020-05-19