C# 如果((x&;y)| | | | | | | z){做这个;},你能写吗?
新手问题:在C#中,我如何设置一组条件,其中一个条件必须是两个值或两个条件同时为真,而不仅仅是其中一个。例如,以下语法是否有效:C# 如果((x&;y)| | | | | | | z){做这个;},你能写吗?,c#,C#,新手问题:在C#中,我如何设置一组条件,其中一个条件必须是两个值或两个条件同时为真,而不仅仅是其中一个。例如,以下语法是否有效: if ( (x && y) || y || z) { do this;} 对。这是有效的语法 (我假设:(1)x、y和z在某个地方被定义;(2)“do this;”是测试通过时您想要执行的伪代码。do和this都是C#关键字,但这似乎不是您的意图) 更新:在下面添加了小提琴来源 public class Program { public st
if ( (x && y) || y || z) { do this;}
对。这是有效的语法 (我假设:(1)x、y和z在某个地方被定义;(2)“do this;”是测试通过时您想要执行的伪代码。
do
和this
都是C#关键字,但这似乎不是您的意图)
更新:在下面添加了小提琴来源
public class Program
{
public static void Main()
{
bool[] booleanDomain = new bool[]{ false, true };
foreach(bool x in booleanDomain)
foreach(bool y in booleanDomain)
foreach(bool z in booleanDomain)
Test(x,y,z);
}
static void Test(bool x, bool y, bool z){
bool result;
if ( (x && y) || y || z) {
Console.WriteLine("the expression \"(x && y) || y || z\" is true when: \nx={0} \ny={1} \nz={2}\n", x, y, z);
}
}
}
如果所涉及的所有标识符都是
bool
标识符,这是有效的语法,表示一个局部变量、一个参数、一个常量、一个字段或一个包含bool
值的属性。如果不是,那么不,这不是合法的语法
我也只是指这部分:
if ( (x && y) || y || z) { do this;}
^----------------------^
最后一部分:{do this;}
不是法律语法,但我理解你的问题与那部分无关
具体来说,你的整个声明是这样说的:
必须为真x&&y
- 或
必须为真y
- 或
必须为真z
y
是独立的,因此涉及x
似乎没有什么意义
让我们看看这个表达式:(x&&y)|y
,看看x
和y
的可能值,结果是:
x | y | result | why?
---------------------------------------------
false | false | false | because neither x nor y is true
false | true | true | because y is true: ... ? || y
true | false | false | because y has to be true either way
true | true | true | because y is true: ... ? || y
基本上,您可以完全删除x
,这对结果没有任何影响(请参阅下面我的额外注释)
因此,你的最后陈述可以是:
if (y || z) { do this; }
说到这里,还有一件事。我还假设x
、y
和z
是其他内容的占位符。如果x
是一种方法呢?那有关系吗
是的,因为要知道
x()
的结果,必须调用该方法。如果调用该方法的副作用不仅仅是返回true
或false
,那么您可能不想简单地删除它。表达式的最终结果并不取决于x
的值,但可能会产生任何副作用。也许设计有问题,但如果没有更具体的东西就很难说出来。你的问题可以通过更好的学习来回答。无论如何,布尔运算&&
的优先级高于|
。
如果
x
、y
和z
是布尔变量,那么您编写的表达式是正确的。这是因为与c/c++不同的是,c#不允许将任何类型转换为bool(即与零不同的任何类型,为true),因为c#在if
条件中仅使用布尔表达式作为参数。为什么不自己编译程序呢?:)首先,您可以尝试一下,编译器会很容易地告诉您它的语法是否有效。第二,是的,你可以做到。这是有效的语法。我会要求您考虑编写代码略有不同,但是,给表达式一个名称,把它存储到一个本地变量,这样更容易读取代码后,当你不必猜测为什么这些表达式检查。例如:boolcansavetodisk=(x&&y)| y | z;如果(canSaveToDisk){do this;}
如何将一组条件放在哪里?其中一个条件必须是两个值?除非它们是布尔值。。。你能用英语重新表述你的问题吗?我们看不懂你的心思。我真的不明白人们为什么要回答这个问题…@GrantWinney实际上,目的是通过条件检查,如果Y单独是真的,或者X和Y一起是真的,但如果X单独是真的,则不通过条件检查。这就是为什么Y被添加到X,但它仍然可以自己通过。现在有意义了吗?如果y
必须是真的,那么检查x&&y
也没有意义(除非x
有副作用,但这会很奇怪:-))。但这是正确的答案,+1我还没有发布完我的答案。请重新阅读我现在更新的答案,看看是否有遗漏。拉丝,非常感谢。这正是我想知道的。我不知道为什么人们在拉选票@Jcl实际上,目的是通过条件检查,如果Y单独为真,或者X和Y一起为真,但如果X单独为真,则不通过条件检查。这就是为什么Y被添加到X,但它仍然可以自己通过。现在有意义了吗?是的,但是X仍然不重要。如果Y是真的,那么X是真是假一点也不重要。@Lasse现在好多了:-)而且-看起来其他人都在告诉你自己编译和运行它。如果这不是一件容易的事情,你要做的设置为小提琴单独,+1。你应该把它包括在回答中,谢谢你;你对我意图的假设和理解是正确的。谢谢你的链接。你又对了;我不是在编译,而是在编辑一个现有的.cs文件,不知道如何测试其有效性,但是通过这个链接,如果我理解的话,也许我可以。