访问范围之外的 C# 匿名类型对象
在 C# 中,匿名类型是使用 new 关键字后跟一组属性初始值设定项创建的在大括号内。当您需要创建不需要命名或进一步定义的临时对象时,它们非常有用。然而,访问声明范围之外的匿名类型对象可能具有挑战性。
要理解这个问题,请考虑以下代码:
void FuncB() { var obj = FuncA(); Console.WriteLine(obj.Name); } object FuncA() { var a = (from e in DB.Entities where e.Id == 1 select new { Id = e.Id, Name = e.Name }).FirstOrDefault(); return a; }
在此代码中,FuncA()返回具有两个属性的匿名类型:Id 和 Name。但是,当 FuncB() 尝试访问 Name 属性时,它将遇到错误,因为编译器无法确定 FuncA() 返回的匿名类型的属性。
一种潜在的解决方案是使用“cast by” example":
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中文网其他相关文章!