C# DynamicObject:有没有办法通过索引访问属性?

Abe*_*Abe 5 c# indexing dynamic

有没有办法通过索引访问动态对象的属性?

List<dynamic> list = _dataStagingManager.GetStatusList(consoleSearch);
foreach (var row in list)
{
    Console.WriteLine(row[0]);
    Console.WriteLine(row[1]);
}
Run Code Online (Sandbox Code Playgroud)

在此示例中,row[0] 的属性名称因存储过程列别名的结果而异。

svi*_*ick 2

一般来说,这是不可能的。例如,您可以创建一个具有所有可能属性的动态对象:

class AnythingGoes : DynamicObject
{
    public override bool TryGetMember(GetMemberBinder binder, out object result)
    {
        result = binder.Name;
        return true;
    }
}
Run Code Online (Sandbox Code Playgroud)

您有机会获得属性列表。如果动态对象实际上是普通对象(未实现 的对象IDynamicMetaObjectProvider),则普通反射将正常工作。

如果该对象实际上是动态的(实现IDynamicMetaObjectProvider),您可以尝试调用从返回GetDynamicMemberNames()的。但是,正如上面的示例所示,这并不能保证有效。DynamicMetaObjectGetMetaObject()