为了账号安全,请及时绑定邮箱和手机立即绑定

将属性包含在谓词中时出现异常

将属性包含在谓词中时出现异常

C#
至尊宝的传说 2023-07-22 17:01:33
我正在尝试比较具有多个属性的两个对象,但需要使用谓词来比较特定属性(object1在 处没有这些属性的确切值object2,因此我需要在那里比较部分字符串)。所以,我正在尝试:object1.Should().BeEquivalentTo(object2, options => options     .Including(o => o.Property1.StartsWith("something"))     .Including(o => o.Property2.StartsWith("something else") );我希望所有其他属性都能像往常一样进行比较。然而,运行上面的代码会抛出异常:消息:System.ArgumentException:表达式<Convert(o.Property1.StartsWith("something"), Object)>不能用于选择成员。参数名称:表达式为什么会出现此异常以及如何修复它?
查看完整描述

1 回答

?
LEATH

TA贡献1936条经验 获得超6个赞

为什么会出现这个异常


发生异常是因为您正在调用函数


.Including(o => o.Property1.StartsWith("something")) //<-- expects property only

在仅期望获得属性表达式的表达式中。


.Including(o => o.Property1) //<-- expects property only

引用原始问题中链接的相同文档,您的示例在进行比较时将仅包含指定的成员。


对于您想要做的事情,您应该查看该Equivalency Comparison Behavior部分,根据您的评论,该部分可能类似于以下示例


[TestClass]

public class ObjectEquivalencyTests {

    [TestMethod]

    public void ShouldBeEquivalent() {


        var expected = new MyObject {

            Property1 = "https://www.google.com",

            Property2 = "something else"

        };


        var actual = new MyObject {

            Property1 = "https://www.google.com/search?q=test",

            Property2 = "something else"

        };


        actual.Should().BeEquivalentTo(expected, options => options

            .Using<string>(ctx => ctx.Subject.Should().StartWith(ctx.Expectation))

            .When(info => info.SelectedMemberPath == "Property1")

        );

    }

}


public class MyObject {

    public string Property1 { get; set; }

    public string Property2 { get; set; }

}


查看完整回答
反对 回复 2023-07-22
  • 1 回答
  • 0 关注
  • 87 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信