我试图只为表达式使用一个对象,但不确定是否可能:
if ((new (Random)).Next(0,1))
{
}
Run Code Online (Sandbox Code Playgroud)
这不起作用,我想知道它是否有可能?
这将有效...请注意,你写的内容有多个错误(逻辑和语法)
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)