繁体   English   中英

我可以直接在“ 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 :-)

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

您甚至可以做更糟糕的事情 (请注意粗体)...

Random rnd;

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

这是因为赋值运算符= “返回”分配的值,因此您要向rnd分配new Random() ,然后将分配的值用于.Next 注意作业周围的其他括号。

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

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

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

for (Random rnd = new Random()...

using (但这一方法比较有限,只能在IDisposable

您需要使用()对其进行初始化。 它仍然不返回任何if条件必须的boolean结果。

像这样做:

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

这是不可能的,因为

  1. 如果条件仅检查布尔条件。即true或false
  2. 您的陈述不返回true或false
  3. 您声明条件是否返回void(或定义的变量)

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM