我正在尝试仅为表达式使用对象,但不确定是否可能:
if ((new (Random)).Next(0,1))
{
}
这不起作用,我想知道它是否可能?
答案 0 :(得分:5)
这将有效......请注意,您所写的内容有多个错误(逻辑和语法)
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
个对象,它们通常会使用相同的种子,并生成相同的序列。 new Random().Next() == new Random().Next()
99次中有100次。
你甚至可以做更多糟糕的事情(注意粗体)......
Random rnd;
if ((rnd = new Random()).Next(0, 2) == 0)
这是因为赋值运算符=
“返回”分配的值,因此您将new Random()
分配给rnd
,然后您将获取指定的值并将其用于{ {1}}。请注意作业周围的附加括号。
如果您的问题确实是我可以直接在“if”表达式中声明一个对象吗?,那么答案是否定的!你不能在.Next
条件表达式中声明一个新变量......你不能这样做:
if
C#中唯一允许这样做的关键字是if ((Random rnd = new Random()).Next(0, 2) == 0)
:
for cycle
和for (Random rnd = new Random()...
(但这个更受限制,它只能在using
中使用)
答案 1 :(得分:1)
您需要使用Channelsingroup
对其进行初始化。它仍然不会返回Daysbeforelast
条件所必需的任何()
结果。
这样做:
boolean
答案 2 :(得分:1)
这是不可能的,因为
答案 3 :(得分:1)
您需要将其更改为if(new Random()。next(0,2)== 0)并且您不应该有任何问题......