Ссылка на IEnumerable из XElements

Я хочу изменить коллекцию IEnumerable XElement (изменить атрибуты, дочерние элементы и т. Д.) Вне цикла итерации, используя отдельный метод. Я обнаружил, что это невозможно со ссылками или присваиванием, потому что способ IEnumerable просто возвращает / выдает значение.

Этот метод добавляет дочерние узлы в XElement:

protected static void setErrorOnItem(ref XElement item, DiagErrorCode errorCode, DiagStatus errorLevel) {
    XElement errorNode = new XElement("Error");
        errorNode.SetAttributeValue("errorCode", errorCode.ToString());
        errorNode.SetAttributeValue("errorLevel", errorLevel.ToString());
        item.Element("Errors").Add(errorNode);
    }

Это отлично работает , если это не в контексте цикла коллекции XElement, которая обрабатывается итератором IEnumerable.

Можно установить атрибуты на узле изнутри цикла. Но как я могу поместить эту логику в свой собственный метод, если ссылки и присвоение не могут быть выполнены?

public IEnumerable<XElement> GetRevisedVariationOverTime(IEnumerable<XElement> items) {
  foreach(XElement item in items) {
    if(sampleSize < RequiredSampleSize) {
      // Works fine...
      item.Attribute("Status").Value = DiagStatus.WARNING.ToString();
      // Can't assign
      item = getItemReplacement(item);
      // Can't reference
      setErrorOnItem(ref item);
    }
  }

  ...
  return items;
}
0
задан Keyo 3 August 2011 в 23:33
поделиться