2

我不确定它是否受支持,但我试图让 fastmember 给我动态的类型信息ExpandoObject(使用下面的代码)并且我收到错误:

System.NotSupportedException:不支持指定的方法。在 FastMember.TypeAccessor.GetMembers() 在 System.Dynamic.UpdateDelegates.UpdateAndExecute1[T0,Tret](CallSite 站点,T0 arg0)

匿名dynamic类型的第二个测试工作正常,但由于某种原因它不适用于ExpandoObject. 这应该是可能的吗?如果不是,我可以通过使用字典实现来考虑替代解决方案,ExpandoObject但对所有内容使用相同的代码会很好。

public class FastMemberTest
{
    [Fact]
    public void GetsMembersOfExpandoObject()
    {
        dynamic dyn = new ExpandoObject();
        dyn.Item1 = 1;
        dyn.Item2 = "Testing";
        var typeAccessor = TypeAccessor.Create(dyn.GetType());

        var members = typeAccessor.GetMembers();

        members.Should().NotBeNull();
    }

    [Fact]
    public void GetsMembersOfDynamicType()
    {
        dynamic dyn = new
        {
            Item1 = 1,
            Item2 = "Testing"
        };
        var typeAccessor = TypeAccessor.Create(dyn.GetType());

        var members = typeAccessor.GetMembers();

    }
}

[测试是 Xunit2]

4

1 回答 1

1

我最终编写了一个模仿快速成员行为的类,但将 expandoobject 转换为 IDictionary 并使用它。然后仅在传递扩展对象时使用它,否则使用快速成员。工作正常,替代实现实际上非常简单。

fastmember 的抽象和隔离对代码库也有好处。

于 2016-09-23T17:30:42.933 回答