Мне нужно выражение LINQ для нахождения XElement, где имя элемента и атрибуты соответствуют входному узлу

Из исходного вопроса не совсем ясно, где выбрасывается исключение, но выглядит очень странно, что вы повторяете несколько строк из firstButtonClicked в производном (дочернем) классе, а затем вызываете метод в базе (родительский) класс.

Когда вы следуете по пути кода, например, ImagesClick увеличивается вдвое (один раз в производном классе, а затем один раз в родительском классе, то же самое происходит с buttonClicked() и моим предположением (потому что я не знаю, реализация) состоит в том, что кнопка становится неактивной, потому что buttonClicked() вызывается дважды.

Одним из преимуществ наследования является то, что вам не нужно повторять общий код. Ваш метод производного класса firstButtonClicked может работать с просто:

public override void firstButtonClicked()
{   
    finalAnswer += "f";
    TryInheritance =finalAnswer;
    base.firstButtonClicked();
}
5
задан Mark Cidade 1 October 2008 в 01:08
поделиться

2 ответа

Это будет соответствовать любому данному элементу точному имени тега и названию атрибута / пары значения:

public static void ReplaceOrAdd(this XElement source, XElement node)
{
    var q = from x in source.Elements()
            where x.Name == node.Name
            && x.Attributes().All(a =>node.Attributes().Any(b =>a.Name==b.Name && a.Value==b.Value))
            select x;

    var n = q.LastOrDefault();

    if (n == null) source.Add(node);
    else n.ReplaceWith(node);                                              
}

var root = XElement.Parse(data);
var newElem =XElement.Parse("<thing2 a1=\"a\" a2=\"b\">new value</thing2>");

root.ReplaceOrAdd(newElem);
5
ответ дан 14 December 2019 в 19:30
поделиться

Можно сделать XPathSelectElement с путем (не заключайте мне в кавычки, к панели; вымоется утром),/root/thing2 [@a1 ='a' и @a2 ='b'], и затем возьмите.LastOrDefault () (XPathSelectElement является дополнительным методом в system.Linq.Xml).

Это получит Вас узел, который Вы хотите изменить. Я не уверен, как Вы хотите изменить его, как бы то ни было. Результатом, который Вы получаете, является фактический XElement, так изменение, это изменит древовидный элемент.

0
ответ дан 14 December 2019 в 19:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: