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

时间:2015-05-25 07:11:16

标签: c# declaration

我正在尝试仅为表达式使用对象,但不确定是否可能:

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

}

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

4 个答案:

答案 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)

这是不可能的,因为

  1. if condition仅检查布尔条件.i.e true或false
  2. 您的陈述既不返回true或false
  3. 如果条件返回void(或定义的变量)
  4. ,则声明

答案 3 :(得分:1)

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