LINQ to XML 中的 InvalidCastException

发布于 2024-11-07 12:59:38 字数 683 浏览 0 评论 0原文

我正在使用 LINQ to XML 从资源中获取一些数据,这里我有一个函数,我在其中获取一些值,然后创建一个新对象(类型翻译),因此当我调用该函数时,我会得到一个翻译对象。现在我有了这段代码:

     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

问题是,使用这段代码我得到了这个错误: 无法将“WhereSelectEnumerableIterator2[System.Xml.Linq.XElement,clsT​​ranslation]”类型的对象转换为“System.Collections.Generic.List1[clsTranslation]”类型。

你知道它的投射方法吗? 预先感谢,

阿方索。

I am using LINQ to XML to take some data from resources , and here I have a function, where I take some values and then I create a new object (Type Translation), so when I call the function I get a Translation object. By now I have this code:

     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

The problem is that with this code I got this error:
Unable to cast object of type 'WhereSelectEnumerableIterator2[System.Xml.Linq.XElement,clsTranslation]' to type 'System.Collections.Generic.List1[clsTranslation]'.

Do you know the way to cast it?
Thanks in advance,

Alfonso.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

⊕婉儿 2024-11-14 12:59:38

如果您在打开 Option Strict 的情况下进行编译,您就会在编译时发现这一点。

您无需强制转换它 - 您对结果调用 ToList(),以从 IEnumerable 创建一个 List

(我还建议您放弃 cls 前缀;它违反了 .NET 命名约定。)

这样会留下:

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

If you were compiling with Option Strict on, you'd have found this out at compile time.

You don't cast it - you call ToList() on the result, to create a List<clsTranslation> from the IEnumerable<clsTranslation>.

(I'd also advise you to ditch the cls prefix; it goes against the .NET naming conventions.)

That would leave:

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
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文