以下代码导致使用未分配的局部变量“ numberOfGroups”:
int numberOfGroups;
if(options.NumberOfGroups == null || !int.TryParse(options.NumberOfGroups, out numberOfGroups))
{
numberOfGroups = 10;
}
但是,此代码可以正常工作(尽管ReSharper说的= 10
是多余的):
int numberOfGroups = 10;
if(options.NumberOfGroups == null || !int.TryParse(options.NumberOfGroups, out numberOfGroups))
{
numberOfGroups = 10;
}
我是否缺少某些东西,或者编译器不喜欢我的东西||
?
我将范围缩小到dynamic
导致问题的范围(options
在我上面的代码中是一个动态变量)。问题仍然存在,我为什么不能这样做?
该代码无法编译:
internal class Program
{
#region Static Methods
private static void Main(string[] args)
{
dynamic myString = args[0];
int myInt;
if(myString == null || !int.TryParse(myString, out myInt))
{
myInt = 10;
}
Console.WriteLine(myInt);
}
#endregion
}
但是,此代码可以:
internal class Program
{
#region Static Methods
private static void Main(string[] args)
{
var myString = args[0]; // var would be string
int myInt;
if(myString == null || !int.TryParse(myString, out myInt))
{
myInt = 10;
}
Console.WriteLine(myInt);
}
#endregion
}
我没有意识到dynamic
这是一个因素。
out
参数。考虑编译器应该产生什么辅助代码来避免该问题,或者是否有可能,这当然很有趣。
out
参数的值用作输入并不足够聪明