我可以直接在 "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 :-)
其他"logical"错误:一个Random
对象应该被重复使用,而不是创建和使用一次然后丢弃。这是因为 Random
对象 "represents" 一个随机数序列(基于种子)。如果您在短时间内创建多个 Random
对象,它们通常会使用相同的种子,并生成相同的序列。 new Random().Next() == new Random().Next()
100 次中有 99 次。
你甚至可以做更多可怕的事情(注意粗体)...
Random rnd;
if ((rnd = new Random()).Next(0, 2) == 0)
这是因为赋值运算符 =
"returns" 赋值,所以你将 new Random()
赋值给 rnd
,然后你取赋值并使用它为 .Next
。请注意作业周围的附加括号。
如果你的问题真的是我可以在“if”表达式中直接声明一个对象吗?,那么答案是否定的!您不能在 if
条件表达式中声明一个新变量...您不能这样做:
if ((Random rnd = new Random()).Next(0, 2) == 0)
C# 中唯一允许这样做的关键字是 for cycle
:
for (Random rnd = new Random()...
和using
(不过这个比较受限,只能在IDisposable
中使用)
您需要使用 ()
对其进行初始化。它仍然没有 return 任何 boolean
结果,这对于 if
条件是必须的。
这样做:
if (new Random().Next(0,2) == 1)
这是不可能的,因为
- if 条件仅检查布尔条件。即 true 或 false
- 你的陈述既return真也不假
- 你在if条件中的声明returns void(或定义的变量)
你需要把它改成 if(new Random().next(0,2)==0) 你应该不会有任何问题...
我正在尝试将对象仅用于表达式,但不确定是否可行:
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 :-)
其他"logical"错误:一个Random
对象应该被重复使用,而不是创建和使用一次然后丢弃。这是因为 Random
对象 "represents" 一个随机数序列(基于种子)。如果您在短时间内创建多个 Random
对象,它们通常会使用相同的种子,并生成相同的序列。 new Random().Next() == new Random().Next()
100 次中有 99 次。
你甚至可以做更多可怕的事情(注意粗体)...
Random rnd;
if ((rnd = new Random()).Next(0, 2) == 0)
这是因为赋值运算符 =
"returns" 赋值,所以你将 new Random()
赋值给 rnd
,然后你取赋值并使用它为 .Next
。请注意作业周围的附加括号。
如果你的问题真的是我可以在“if”表达式中直接声明一个对象吗?,那么答案是否定的!您不能在 if
条件表达式中声明一个新变量...您不能这样做:
if ((Random rnd = new Random()).Next(0, 2) == 0)
C# 中唯一允许这样做的关键字是 for cycle
:
for (Random rnd = new Random()...
和using
(不过这个比较受限,只能在IDisposable
中使用)
您需要使用 ()
对其进行初始化。它仍然没有 return 任何 boolean
结果,这对于 if
条件是必须的。
这样做:
if (new Random().Next(0,2) == 1)
这是不可能的,因为
- if 条件仅检查布尔条件。即 true 或 false
- 你的陈述既return真也不假
- 你在if条件中的声明returns void(或定义的变量)
你需要把它改成 if(new Random().next(0,2)==0) 你应该不会有任何问题...