Der folgende Code führt zur Verwendung der nicht zugewiesenen lokalen Variablen "numberOfGroups" :
int numberOfGroups;
if(options.NumberOfGroups == null || !int.TryParse(options.NumberOfGroups, out numberOfGroups))
{
numberOfGroups = 10;
}
Allerdings funktioniert dieser Code in Ordnung (obwohl, ReSharper , sagt der = 10
überflüssig ist):
int numberOfGroups = 10;
if(options.NumberOfGroups == null || !int.TryParse(options.NumberOfGroups, out numberOfGroups))
{
numberOfGroups = 10;
}
Vermisse ich etwas oder mag der Compiler meine nicht ||
?
Ich habe dies eingegrenzt, dynamic
um die Probleme zu verursachen ( options
war eine dynamische Variable in meinem obigen Code). Es bleibt die Frage, warum ich das nicht tun kann .
Dieser Code wird nicht kompiliert:
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
}
Dieser Code bewirkt jedoch :
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
}
Ich wusste nicht, dynamic
dass dies ein Faktor sein würde.
out
Aufrufsite verfügt wahrscheinlich über einen Kontrollfluss, der keine Zuordnung zum Parameter garantiert . Es ist sicherlich interessant zu überlegen, welchen Hilfscode der Compiler erstellen sollte, um das Problem zu vermeiden, oder ob dies überhaupt möglich ist.
out
Parameter übergebenen Wert nicht als Eingabe verwenden