我想用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(),如图所示?或者循环是唯一(或最有效)的方式?
答案 0 :(得分:2)
嗯,您正在处理在更现代的通用列表和枚举之前创建的2个集合,因此它们的使用不那么流畅。
在这种情况下,AddRange
方法接受另一个ObjectCollection
实例(不是您的情况)或一个Object
数组。如果您想从后者中受益,您需要将StringCollection
实例转换为Object
的数组。以下是如何做到这一点:
ListBox1.Items.AddRange(printerList.Cast(Of Object)().ToArray())
那就是说,我会坚持你当前的For Each
循环。它非常易读,并且不会创建中间数组。但是,我怀疑这两种选择会产生很大的不同,所以选择你喜欢的。