2014-01-06 7 views
0

Содержит ли спецификация C# вызов метода из структуры инициализатора объекта (или структуры)?Функции и использование свойств в инициализаторах объектов

Причина, по которой я прошу, заключается в том, что я пытался использовать оператор LINQ to XML для использования данных gater в инициализаторе. Это не работает. Однако, если я получаю данные до того, как их сохранят в локальной переменной, они будут работать без проблем. Я просто задавался вопросом, почему это происходит, поскольку я уже понял ошибку в моем коде.

не работает:

SavedData sData = new SavedData() 
{ 
     exportLocation = data.Root.Descendants("ExportLocation").FirstOrDefault().Value, 
     exportType = (ExportType)data.Root.Descendants("ExportType").FirstOrDefault().Value 
}; 

Работы:

var exLoc = data.Root.Descendants("ExportLocation").FirstOrDefault().Value; 
ExportType type = (ExportType)data.Root.Descendants("ExportType").FirstOrDefault().Value; 

Saved Data sData = new SavedData() 
{ 
    exportLocation = exLoc, 
    exportType = type 
}; 
+1

Что вы подразумеваете под * не работает *? Он компилируется для меня отлично. – MarcinJuraszek

+0

Он должен работать. Мы могли бы помочь, если бы вы рассказали нам, как это не работает. – fejesjoco

+0

@MarcinJuraszek _does not work_ в этом случае не означает, что он не компилируется. Объект не инициализируется и не равен нулю. – JNYRanger

ответ

1

Вы можете вызвать методы в инициализаторах, так что есть еще что-то здесь происходит.

следующей прекрасная для меня работа:

class A 
    { 
     public int x { get; set; } 
    } 

    class B 
    { 
     public int foo() 
     { 
      return 3; 
     } 
    } 

    class Program 
    { 
     static void Main(string[] args) 
     { 
      B data = new B(); 
      A a = new A() { 
       x = data.foo() 
      }; 
     } 
    } 

A.x получает значение 3, поэтому он прекрасно работает.

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

+0

Вы были верны. Оказывается, у моего XML-файла была проблема, и из-за этого он не разбирал значение перечисления «ExportType» правильно, не будучи обернутым как «Enum.Parse» (typeof (ExportType), [LINQ-TO-XML ЗДЕСЬ]) 'Спасибо для указания меня в правильном направлении. – JNYRanger

Смежные вопросы