从StringCollection转换或转换为ObjectCollection?

时间:2016-08-31 22:08:47

标签: vb.net

我想用VB.net中的已安装打印机列表填充列表框。

这有效:

Dim printerList As System.Drawing.Printing.PrinterSettings.StringCollection
printerList = System.Drawing.Printing.PrinterSettings.InstalledPrinters

For Each printerName In printerList
    ListBox1.Items.Add(printerName)
Next

这不起作用:

ListBox1.Items.AddRange(printerList)

...由于以下类型转换错误:

  

Public Sub AddRange(值为   System.Windows.Forms.ListBox.ObjectCollection)':类型的值   ' System.Drawing.Printing.PrinterSettings.StringCollection'不可能是   转换为' System.Windows.Forms.ListBox.ObjectCollection'。

是否可以直接将其中一个投射到另一个用于AddRange(),如图所示?或者循环是唯一(或最有效)的方式?

1 个答案:

答案 0 :(得分:2)

嗯,您正在处理在更现代的通用列表和枚举之前创建的2个集合,因此它们的使用不那么流畅。

在这种情况下,AddRange方法接受另一个ObjectCollection实例(不是您的情况)或一个Object数组。如果您想从后者中受益,您需要将StringCollection实例转换为Object的数组。以下是如何做到这一点:

ListBox1.Items.AddRange(printerList.Cast(Of Object)().ToArray())

那就是说,我会坚持你当前的For Each循环。它非常易读,并且不会创建中间数组。但是,我怀疑这两种选择会产生很大的不同,所以选择你喜欢的。