Неверное использование castexeption в LINQ для XML

#.net #vb.net #casting #linq-to-xml

#.net #vb.net #Кастинг #linq-to-xml

Вопрос:

Я использую LINQ to XML для получения некоторых данных из ресурсов, и здесь у меня есть функция, где я принимаю некоторые значения, а затем создаю новый объект (тип Translation), поэтому, когда я вызываю функцию, я получаю объект Translation. К настоящему моменту у меня есть этот код:

      Public Shared Function RetrieveTranslation(ByVal file As String) As List(Of clsTranslation)
    Dim valuetrans = From vl In XElement.Load(file).Elements("data") Select (New clsTranslation With {.Filename = file, .Value = vl.Element("value").Value, .TranslationId = vl.Attribute("name").Value})
    Return valuetrans
End Function
  

Проблема в том, что с этим кодом я получил эту ошибку:
Не удается привести объект типа ‘WhereSelectEnumerableIterator 2[System.Xml.Linq.XElement,clsTranslation]' to type 'System.Collections.Generic.List 1[clsTranslation]’.

Вы знаете способ его приведения? Заранее спасибо,

Альфонсо.

Ответ №1:

Если бы вы компилировали с включенной опцией Strict, вы бы обнаружили это во время компиляции.

Вы не приводите его — вы вызываете ToList() результат, чтобы создать List<clsTranslation> из IEnumerable<clsTranslation> .

(Я бы также посоветовал вам отказаться от cls префикса; это противоречит .СЕТЕВЫЕ соглашения об именовании.)

Это оставило бы:

 Public Shared Function RetrieveTranslation(ByVal file As String) _
        As List(Of Translation)
    Return (From vl In XElement.Load(file).Elements("data") _
            Select (New Translation With { _
                               .Filename = file, _
                               .Value = vl.Element("value").Value, _
                               .TranslationId = vl.Attribute("name").Value}) _
           ).ToList()
End Function
  

Комментарии:

1. большое вам спасибо, так оно и было! также спасибо за советы 😉