#.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. большое вам спасибо, так оно и было! также спасибо за советы 😉