访问超出声明范围的匿名类型对象
在 C# 中,匿名类型是根据从源中提取的属性名称和值动态生成的。但是,这些对象的范围仅限于声明它们的块。这就提出了一个问题:我们如何访问声明范围之外的匿名类型对象?
使用“按示例进行转换”(建议谨慎)
虽然通常不推荐,一种称为“通过示例进行转换”的技术允许访问超出其范围的匿名类型对象。此黑客涉及创建一个单独的“示例”对象,其属性与我们要访问的匿名类型相同。
实现:
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; }
注意事项:
总之,使用“通过示例进行转换”访问超出其范围的匿名类型对象是可能的,但这是一种危险的做法,应尽可能避免。
以上是如何在 C# 中访问其声明范围之外的匿名类型对象?的详细内容。更多信息请关注PHP中文网其他相关文章!