我可以直接在“;如果“;表示

本文关键字:表示 如果 我可以 | 更新日期: 2023-09-27 17:50:34

我试图将对象仅用于表达式,但不确定这是否可能:

if ((new (Random)).Next(0,1))
{
}

这不起作用,我想知道这是否可能?

我可以直接在“;如果“;表示

这将起作用。。。注意,你写的东西有多个错误(逻辑和语法(

if (new Random().Next(0,2) == 0)

您不是在声明一个对象,而是在创建一个对象。

创建对象的语法为new TypeName()new TypeName {}。如果构造函数有参数,则必须使用语法new TypeName(par1, par2)

new Random().Next(0, 1)完全没用。。。因为它会生成一个0到1之间的随机数,所以排除了0和0,所以0:-(

其他"逻辑"错误:Random对象应该被重用,而不是创建和使用一次然后丢弃。这是因为Random对象"表示"一系列随机数(基于种子(。如果在短时间内创建多个Random对象,它们通常会使用相同的种子,并生成相同的序列。CCD_ 8 100次中有99次。

你甚至可以做更多可怕的事情(注意粗体(。。。

Random rnd;
if ((rnd = new Random()).Next(0, 2) == 0)

这是因为赋值运算符="返回"赋值,所以将new Random()赋值给rnd,然后取赋值并将其用于.Next。注意作业周围的附加括号。

如果你的问题真的是我可以直接在"If"表达式中声明一个对象吗,那么答案是否定的!不能在if条件表达式中声明新变量。。。你不能做:

if ((Random rnd = new Random()).Next(0, 2) == 0)

C#中唯一允许这样做的关键字是for cycle:

for (Random rnd = new Random()...

using(但这一个更有限,它只能在IDisposable中工作(

这是不可能的,因为

  1. if条件仅检查布尔条件。即true或false
  2. 你的陈述既不正确也不错误
  3. if条件中的语句返回void(或定义的变量(

您需要将其更改为if(new Random((.next(0,2(==0(,您应该不会有任何问题。。。

您需要使用()对其进行初始化。它仍然不返回任何boolean结果,这对于if条件来说是必须的。

这样做:

if (new Random().Next(0,2) == 1)