2017-06-22 126 views
0

我有字符串的队列:如何正确地将字符串数组连接到队列?

Public Class QueueClient 
    Private gaoFiles As New Queue(Of String) 

和在属性呼叫的意图的函数来连接字符串的阵列,以串的队列:

Public Property AddFiles As String() 
     ... 
     Set(asValue As String()) 
      AddFilesToQueue(asValue) 
     End Set 
    End Property 

这是被调用的函数,其中我尝试执行连接。

Private Sub AddFilesToQueue(asFiles() As String) 
     gaoFiles = CType(gaoFiles.Concat(asFiles), Queue(Of String)) 
    End Sub 
End Class 

这让我的InvalidCastException(我有Option Strict On)。

我明白,

gaoAudioFiles.Concat(asFiles) 

试图从一个字符串数组到Queue(Of String),它不这样做,由于我设置的隐式转换。

如何正确投射?

给我

回答

2

这并不是在所有你是怎么想的工作。

Queue(Of T)类型的Concat()方法是从IEnumerable(OF T)继承的,它使用的是执行,这意味着所有你得到的回复是一个IEnumerable(Of T)。如果你可以将IEnumerable(Of T)转换为Queue(Of T),但这个效果没问题(虽然效率不是很高),但是这个效果并不存在。取而代之的是,你必须入队每个项目:

Private Sub AddFilesToQueue(asFiles() As String) 
    For Each file As String in asFiles 
     gaoFiles.Enqueue(file) 
    Next file 
End Sub 

这也是一种奇怪的以这种方式使用属性。当你使用赋值语义时,最终用户期望一个变量被完全替换为一个新值。通过赋值语义追加是不正常的。更好地解决方法...但您可以使方法更有用,像这样:

Public Sub AddFilesToQueue(asFiles As IEnumerable(Of String)) 
    For Each file As String in asFiles 
     gaoFiles.Enqueue(file) 
    Next file 
End Sub 

您仍然可以直接传递数组到该方法。您还可以传递List(Of String)或从IEnumerable继承的任何其他序列(并且有很多)。

+0

感谢您的时间向我解释这一点。 (事实上​​,我在检测Concat方法之前有了循环。) - 同样感谢你的建议,我将使这个方法成为一个方法(并且“Getter”是一个名为Files或类似的函数)。另外,IEnumerable()的提示对我很有用。 – Herb

相关问题