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

时间:2015-01-05 16:24:12

标签: c# properties codedom

使用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不是我需要的。我在文档中看不到它

1 个答案:

答案 0 :(得分:1)

C#没有单独的值相等和引用相等运算符,只有==。这意味着IdentityInequality将以您希望的方式运行并生成!=

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