首页 >后端开发 >C++ >如何访问范围之外的 C# 匿名类型对象?

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

Barbara Streisand
Barbara Streisand原创
2025-01-04 18:48:39398浏览

How Can I Access C# Anonymous Type Objects Outside Their Scope?

访问范围之外的 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn