次のコードでは、割り当てられていないローカル変数 "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
paramに渡された値を入力として使用していないことを知っているほど賢いとは思わない