Hebt der C# Compiler Variable Deklarationen aus Methoden, die in Schleifen aufgerufen werden?C#

Ein Treffpunkt für C#-Programmierer
Anonymous
 Hebt der C# Compiler Variable Deklarationen aus Methoden, die in Schleifen aufgerufen werden?

Post by Anonymous »

Ich habe eine Methode, die eine Helfermethode innerhalb einer für Schleife aufruft. Die Helfer -Methode enthält eine relativ teure Definition und Definition, die Reflexion beinhaltet (siehe unten). Ich frage mich, ob der Compiler auf die Methode Call inline und die Definition aus der Schleife herausgezeigt werden kann oder ob ich brauche, oder ob ich brauche, oder ob ich brauche Um die Methode neu zu gestalten, um sicherzustellen, dass die Definitionserklärung nicht mit jeder Iteration ausgeführt wird. < /p>

Code: Select all

private class1[] BuildClass1ArrayFromTestData()
{
var class1Count = int.Parse(testContextInstance.DataRow["class1[]"].ToString());
var class1s = new List(class1Count);

for (var c = 0; c < class1Count; c++)
{
class1s.Add(BuildClass1FromTestData(string.Format("class1[{0}]", c)));
}

return class1s.ToArray();
}

private class1 BuildClass1FromTestData(string testContextName)
{
DataColumnCollection columns = testContextInstance.DataRow.Table.Columns;
var class1Fields = typeof(class1).GetFields();

var class1Object = new class1();

foreach (var field in class1Fields)
{
var objectContextName = string.Format("{0}.{1}", testContextName, field.Name);

if (!columns.Contains(objectContextName))
continue;

// Assume that all fields are of type "string" for simplicity
field.SetValue(
class1Object,
testContextInstance.DataRow[objectContextName].ToString()
);
}

return class1Object;
}
< /code>

 Update: < /strong> < /p>

Hier ist die Alternative, die ich mir vorstellen kann, zur Klärung Zwecke: < /p>

private class1[] BuildClass1ArrayFromTestData()
{
var class1Count = int.Parse(testContextInstance.DataRow["class1[]"].ToString());
var class1s = new List(class1Count);

// Moved from BuildClass1FromTestData()
DataColumnCollection columns = testContextInstance.DataRow.Table.Columns;
var class1Fields = typeof(class1).GetFields();

for (var c = 0; c < class1Count; c++)
{
class1s.Add(BuildClass1FromTestData(string.Format("class1[{0}]", c)), columns, class1Fields);
}

return class1s.ToArray();
}

private class1 BuildClass1FromTestData(string testContextName, DataColumnCollection columns, FieldInfo[] class1Fields)
{
var class1Object = new class1();

foreach (var field in class1Fields)
{
var objectContextName = string.Format("{0}.{1}", testContextName, field.Name);

if (!columns.Contains(objectContextName))
continue;

// Assume that all fields are of type "string" for simplicity
field.SetValue(
class1Object,
testContextInstance.DataRow[objectContextName].ToString()
);
}

return class1Object;
}

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post