Я хочу изменить коллекцию 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;
}