我可以直接在 "if" 表达式中声明一个对象吗?

Can I declare an object directly in the "if" expression?

我正在尝试将对象仅用于表达式,但不确定是否可行:

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 :-)

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

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

Random rnd;

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

这是因为赋值运算符 = "returns" 赋值,所以你将 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中使用)

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

这样做:

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

这是不可能的,因为

  1. if 条件仅检查布尔条件。即 true 或 false
  2. 你的陈述既return真也不假
  3. 你在if条件中的声明returns void(或定义的变量)

你需要把它改成 if(new Random().next(0,2)==0) 你应该不会有任何问题...