0

IList コレクションにロードし、Linq クエリを実行している以下のモデルがあります。私が抱えている問題は、Linq クエリが OPCServer メンバーを (Char の) IEnumerable として返すことです。これが基になる文字列を返さない理由はありますか?

コレクションを a で反復すると、For Each期待どおりに文字列が返されます。

作業コードセクションに示されているように、手動で変換する必要がありますか?

モデル

Friend Class OpcDataTags

    Public Property Host As String
    Public Property HostLive As Boolean
    Public Property OpcServer As String
    Public Property OpcChannel As String
    Public Property PlcDns As String
    Public Property PlcIP As String
    Public Property Zone As String
    Public Property DataBlock As String
    Public Property StartByte As Int16
    Public Property ByteSize As Int16
    Public Property DataType As String
    Public Property Subscribed As Boolean
    Public Property Description As String
    Public Property ArraySize As Nullable(Of Int32)
    Public Property Abbreviation As String
    Public Property PlcID As Int32

End Class

コレクション

Friend Property OpcTags As IList(Of OpcDataTags)

LinqQuery

Dim server = From o In OpcTags.First.OpcServer

作業コード

Dim result = From o In OpcTags.First.OpcServer
Dim server As String = New String(result.ToArray)
4

1 に答える 1

3

あなたが実際に達成したかったのはこれでした:

' From LINQ's point of view, OpcTags is an IEnumerable< OpcDataTags >
Dim serverQuery = From o In OpcTags Select o.OpcServer
' And now you've narrowed it down to an IEnumerable< String >

Dim firstOne = serverQuery.First
' And now you're selecting the first String from that enumeration of strings

また、列挙で文字列が生成されない場合、これにより例外がスローされる可能性があることにも注意してください。

FirstOrDefaultその状態が可能であり、その効果が不快である場合は、代わりに使用できます

Dim firstOne_OrNothingIfNone = serverQuery.FirstOrDefault

Stringクラスが実装されIEnumerable< Char >、実際には、より多くの値のソースのように見えるように強制されていました(したがって、暗黙的に最適なIEnumerable一致にキャストされていましたIEnumerable< Char >) 。

于 2013-02-28T11:04:00.160 に答える