使用 CSharp CodeDom 获取完整的属性集语句

Using CSharp CodeDom for a full property set statement

使用 CSharp CodeDom,我想生成以下代码:

set
{
    if(_myproperty != value)
    {
        _myproperty = value;
    }
}

我可以执行以下操作,但这不是我想要的

cmp.SetStatements.Add(
    new CodeConditionStatement(
        //condition
        new CodeBinaryOperatorExpression(
            new CodeFieldReferenceExpression(new CodeThisReferenceExpression(),"_myproperty" ),
            CodeBinaryOperatorType.ValueEquality,
            new CodePropertySetValueReferenceExpression()),
        //true statements
        new CodeStatement[]{},
        //False Statements
        new CodeStatement[]{
            new CodeAssignStatement(
                new CodeFieldReferenceExpression(new CodeThisReferenceExpression(),"_myproperty"),
                new CodePropertySetValueReferenceExpression()
            )
        })
);

以上就给我

set
{
    if(_myproperty == value)
    {
    }
    else
    {
        _myproperty = value;
    }
}

问题是:如何使用 CodeBinaryOperatorType 枚举执行“!=”或 valueinequality 操作,或者我可以这样做吗?

我假设 IdentityInequality 不是我需要的。我在文档中看不到它

C# 没有单独的值相等和引用相等运算符,只有 ==。这意味着 IdentityInequality 将按照您想要的方式工作并生成 !=.

您可以通过查看 the reference source of CSharpCodeProvider 来验证这一点。