powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Не работает ?? . Как так?
3 сообщений из 3, страница 1 из 1
Не работает ?? . Как так?
    #38774395
Саша_un
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Делаю такую вещь:
Код: c#
1.
  XmlDocument xDoc = ParentNode.OwnerDocument ?? (XmlDocument)ParentNode;


Т.е. я хочу, если в качестве ParentNode передан узел, то вернуть ссылку на его XML - документ, а если передан он сам (и ссылка будет null), то вернуть его самого. Так вот возвращается null, если передан он сам.

А если сделать так:
Код: c#
1.
  XmlDocument xDoc = (ParentNode.OwnerDocument == null) ? (XmlDocument)ParentNode : ParentNode.OwnerDocument;


то возвращается вполне нормальная ссылка на документ. А разница-то в чём, не пойму?

Или если вот так написать, в два этапа:
Код: c#
1.
2.
   XmlDocument tmp = ParentNode.OwnerDocument;
   XmlDocument xDoc = tmp ?? (XmlDocument)ParentNode;


то тоже работает нормально. Не пойму, в чём прикол? Студия 12-я, Windows-8.
...
Рейтинг: 0 / 0
Не работает ?? . Как так?
    #38774815
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Саша_un,
Вы код то приложите.

У меня вот работает:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
            XDocument doc = new XDocument(
                new XElement("root",
                    new XElement("level1",
                        new XElement("level2", "value"))));

            XmlDocument xDoc = new XmlDocument();
            xDoc.LoadXml(doc.ToString());

            var node = xDoc.OwnerDocument ?? (XmlDocument) xDoc;
...
Рейтинг: 0 / 0
Не работает ?? . Как так?
    #38777995
Саша_un
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> Вы код то приложите.
Код вот такой (возможно, много лишнего, ну да ладно - строк не много):
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
  public abstract class XmlNodeClass
  {
    protected XmlDocument xDoc;
    public XmlNodeClass(XmlNode Node)
    {
      xDoc = Node.OwnerDocument ?? (XmlDocument)Node;
      if (xDoc == null)
        Console.WriteLine("xDoc = null");
      else
        Console.WriteLine("xDoc = {0}",xDoc.ToString());
    }
  }

  public class MyClass : XmlNodeClass
  {
    public MyClass(XmlNode nd):base(nd)
    {
    }
  }

  class Program
  {
    static void Main(string[] args)
    {
      XmlDocument xDoc = new XmlDocument();
      xDoc.AppendChild(xDoc.CreateXmlDeclaration("1.0", null, null));
      xDoc.PreserveWhitespace = false;
      xDoc.AppendChild(xDoc.CreateElement("MyDocumentElement"));
      MyClass mc = new MyClass(xDoc);
      Console.ReadKey();
    }
  }


Но похоже, глючит не программа, а сама среда. Программа идёт по правильной ветке, но в отладчике правильное значение появляется только на следующем шаге (после else). Это и сбило меня с толку (см. картинку). А вот почему так, понять бы...
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Не работает ?? . Как так?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]