如何在C#中测试条件运算符的右关联性 - c#

我写了下面的代码。

static void Main(string[] args)
{
    var xyz = 10 < 11 ? 12 : 5 < 21 ? getValue() : 15;
    Console.WriteLine(xyz);
    Console.ReadLine();
}

static int getValue()
{
    Console.WriteLine("hello");
    return 100;
}

由于第一个条件始终为true,因此xyz将获得的值为12,但是由于条件运算符本身是正确的关联,因此我期望getValue()函数将首先执行,并且将输出“ hello”。当我运行此代码时,它不会以这种方式运行。

有人可以启发我这种行为。

参考方案

这个:

var xyz = 10 < 11 ? 12 : 5 < 21 ? getValue() : 15;

被视为:

var xyz = 10 < 11 ? 12 : (5 < 21 ? getValue() : 15);

因此,我们有一个条件表达式:

条件:10 < 11
第一分支:12
第二个分支:5 < 21 ? getValue() : 15

由于10 < 11为true,因此将评估第一个分支,但不评估第二个分支。

在您的代码中不像在每个操作数上使用bool表达式的代码那样容易显示关联性,因为可以使用任何一种关联性进行编译。

考虑以下代码:

using System;

class Test
{
  static void Main()
  {            
    var xyz = Log(1, true) ? Log(2, true) : Log(3, true) ? Log(4, false) : Log(5, true);
  }

  static bool Log(int x, bool result)
  {
    Console.WriteLine(x);
    return result;
  }
}

为了简单起见,将每个Log(x, ...)重命名为Lx,我们有:

var xyz = L1 ? L2 : L3 ? L4 : L5;

可以这样处理:

// Right associativity
var xyz = L1 ? L2 : (L3 ? L4 : L5);

// Left associativity
var xyz = (L1 ? L2 : L3) ? L4 : L5;

在返回结果的情况下,我们希望看到的是右结合性,结果为1、2。使用右结合性,我们看到的结果为1,2,4。关联性。

如何在C#中的循环过程中多次更改控件的属性 - c#

我正在尝试做这样的事情:int i; while(true) { label1.Text = i.ToString(); i++; Thread.Sleep(500); } (实际上,我正在尝试做更复杂的事情,这更有意义,但这只是我的问题的一个简单示例)我期望标签的文本每1/2秒更改一次..但是它被卡住了。谢谢 参考方案 您不能让GUI线程进入睡眠状态(因为…

如何在C#Linq中找到集合的最小差异对象 - c#

我有收藏Class MyData { int f1; int f2; int f3; int f4; } var mycollection =List<MyData>(); 我需要返回字段f1和f3之间具有最小差异的对象。我在下面查询了mycollection.select(obj => obj.f1 - obj.f3).Min(); 但是…

如何在C#中使用Telegram API发送消息 - c#

我想在C#中使用Telegram API将简单消息发送给号码。我在GitHub上找到了一些lib,但是我无法使用它们。谁能给一个简单的代码?我可以简单地进行HTTP调用吗? 参考方案 安装包电报使用Botfather创建一个Bot使用/ token命令获取api密钥(仍在botfather中)使用此代码:var bot = new Api("you…

如何在C++应用程序中访问Java方法 - java

只是一个简单的问题:是否可以从c / c ++调用Java函数? 参考方案 是的,可以,但是有点麻烦,并且可以以反射/非类型安全的方式工作(示例使用的C++ API比C版本更清洁)。在这种情况下,它将从C代码中创建Java VM的实例。如果首先从Java调用您的本机调用,则无需构造VM实例#include<jni.h> #include<s…

Java中的“ <<”运算符 - java

最喜欢的语句来自Java的Character类:(1 << Character.PARAGRAPH_SEPARATOR)) >> type PARAGRAPH_SEPARATOR是字节,type是整数。这句话中的操作员,他们做什么?如何以及在哪里可以使用这些运算符?这是oracles java.lang.Character文档。该类中…