我有点陷入困境,尝试生成一个复杂的if语句,如下面的那个
if (class1.Property == class2.Property || (class3.Property && class4.Property))
{
//do something
}
else
{
//do something else
}
通过使用CodeConditionStatement类,我可以生成上面的第一个条件,但我似乎无法找到添加第二个条件的方法,特别是使用所需的括号以及如何在运行时进行评估的方式?
注意:我不想使用CodeSnippetExpression类。
有什么想法吗?
提前致谢。
答案 0 :(得分:4)
将条件分成3个二进制表达式:(class1.Property == class2.Property || (class3.Property || class4.Property)
class3.Property || class4.Property
- 左侧和右侧CodePropertyReferenceExpression的CodeBinaryOperatorExpression class1.Property == class2.Property
- 左侧和右侧CodePropertyReferenceExpression的CodeBinaryOperatorExpression #2 || #1
- 左边的CodeBinaryOperatorExpression#2和右边的#1 答案 1 :(得分:1)
首先,一种简单的方法是声明一个布尔变量。 将其初始化为false,并将其初始化为if操作该变量的顺序。 不要担心性能或可读性,有时它更具可读性。
bool x = false;
if (class1.Property == class2.Property)
{
x = true;
}
if (class3.Property == class4.Property)
{
x = true;
}
if (!anotherthingtocheck)
x = false;
if (x)
{
// Do something
}
else
{
// Do something else
}
答案 2 :(得分:0)
简化为仅比较布尔值,但保留if,else ......
Toast mytoast;
mytoast = Toast.makeText(getApplicationContext(), "Hi Ho Jorgesys! ", Toast.LENGTH_LONG);
mytoast.show();
....
....
....
if(CancelToast){
mytoast.cancel();
}
产生
CodeEntryPointMethod start = new CodeEntryPointMethod();
//...
start.Statements.Add(new CodeVariableDeclarationStatement(typeof(bool), "ifCheck", new CodePrimitiveExpression(false)));
var e1 = new CodeBinaryOperatorExpression(new CodePrimitiveExpression(false), CodeBinaryOperatorType.IdentityEquality, new CodePrimitiveExpression(false));
var e2 = new CodeBinaryOperatorExpression(new CodePrimitiveExpression(false), CodeBinaryOperatorType.IdentityEquality, new CodePrimitiveExpression(true));
var ifAssign = new CodeAssignStatement(new CodeVariableReferenceExpression("ifCheck"), new CodeBinaryOperatorExpression(e1, CodeBinaryOperatorType.BooleanOr, e2));
start.Statements.Add(ifAssign);
var x1 = new CodeVariableDeclarationStatement(typeof(string), "x1", new CodePrimitiveExpression("Anything here..."));
var ifCheck = new CodeConditionStatement(new CodeVariableReferenceExpression("ifCheck"), new CodeStatement[] { x1 }, new CodeStatement[] { x1 });
start.Statements.Add(ifCheck);