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

Joh*_*n V 0 c# declaration

我试图只为表达式使用一个对象,但不确定是否可能:

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

}
Run Code Online (Sandbox Code Playgroud)

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

xan*_*tos 5

这将有效...请注意,你写的内容有多个错误(逻辑和语法)

if (new Random().Next(0,2) == 0)
Run Code Online (Sandbox Code Playgroud)

而且你没有声明一个对象,你正在创建一个对象.

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

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

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

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

Random rnd;

if ((rnd = new Random()).Next(0, 2) == 0)
Run Code Online (Sandbox Code Playgroud)

这是因为赋值运算符="返回"分配的值,因此您要分配new Random()rnd,然后您将获取指定的值并将其用于.Next.请注意作业周围的附加括号.

如果您的问题确实可以直接在"if"表达式中声明对象吗?那么答案是否定的!你不能在if条件表达式中声明一个新变量......你不能这样做:

if ((Random rnd = new Random()).Next(0, 2) == 0)
Run Code Online (Sandbox Code Playgroud)

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

for (Random rnd = new Random()...
Run Code Online (Sandbox Code Playgroud)

using(但这个更有限,它只能工作IDisposable)