Согласно ли объявление переменных компилятора C# из -за методов, называемых в циклах?C#

Место общения программистов C#
Ответить
Anonymous
 Согласно ли объявление переменных компилятора C# из -за методов, называемых в циклах?

Сообщение Anonymous »

У меня есть метод, который вызывает вспомогательный метод из цикла . Метод помощника содержит относительно дорогостоящее объявление переменной и определение, которое включает в себя отражение (см. Ниже.) Мне интересно, можно ли подсчитать компилятор, чтобы встроить метод вызов и поднять объявление и определение из цикла, или если мне нужно Рефактор метод, чтобы гарантировать, что оператор определения не выполняется с каждой итерацией. < /p>

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>

Обновление: < /strong> < /p>

Вот альтернатива, которую я предполагаю, для разъяснения Цели: < /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;
}


Подробнее здесь: https://stackoverflow.com/questions/244 ... alled-with
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»