В вашем коде есть две ошибки:
- Вы повторяете последовательность с помощью foreach и пытаетесь изменить повторяющиеся элементы; таким образом, исключение, которое выдает.
- Вы пытаетесь заменить объект столбца вместо его имени.
Кроме того, вы используете ToString и, как уже было указано Michal Turczyn , вы не используете встроенные методы String, явно предназначенные для проверки пустых или нулевых строк.
Вы можете попробовать заменить код внутри l oop на
var oldName = column.ColumnName;
if (!string.IsNullOrEmpty(oldName))
{
var newName = oldName.Trim();
if (newName != oldName)
{
column.ColumnName = newName;
trimmed = 1;
}
}
Из этого кода замены Вы можете видеть, что:
- Вы должны читать / писать
ColumnName
свойство вместо использования ToString
. - Вы можете избежать вызова
TrimStart
и TrimEnd
один за другим (в любом порядке) с помощью Trim
. - Вы должны использовать
string.IsNullOrEmpty
вместо проверки на наличие пустой нулевой строки. - Объявляя
oldName
и newName
, вы можете отслеживать имя столбца как усеченное, только если это действительно так.
Более того, если вы назначаете только значения 0 и 1 От до trimmed
, тогда вы должны рассмотреть возможность объявления его как bool
и присвойте false или true . В противном случае вы можете сохранить trimmed
переменную как число, но увеличивая ее значение, а не присваивать всегда одну и ту же константу (1).
Если то, что вы пытаетесь изменить, это не имя столбца, а ячейка значение в текущей строке для такого столбца, то вам не хватает получить (и позже установить) значение ячейки (вы оцениваете и пытаетесь изменить только имя столбца). В этом случае внутренний код l oop становится:
var oldValue = row[column] as string;
if (!string.IsNullOrEmpty(oldValue))
{
var newValue = oldValue.Trim();
if (newValue != oldValue)
{
row[column] = newValue;
trimmed = 1;
}
}