我正在尝试将文件和路径列表传递给仅接受String(,)的第三方方法。此选择可能因用户选择而异。
我认为以下代表2D数组,保存文件的路径和名称。
myFiles As New List(Of Dictionary(Of String, String))()
但是当我必须将它传递给方法时,例如
ProcessFiles(ByVal Attachments(,) As String)
使用
ProcessFiles(myFiles.ToArray())
我收到错误
“字典的值(字符串,字符串)()不能转换为 字符串(,)因为数组类型具有不同的数字 尺寸。
如何定义我的List以代表数组?
阵列期待
的布局(0,0) --> "\\location\Of\File"
(0,1) --> "filename"
(1,0) --> "\\location\Of\File2"
(1,1) --> "filename2"
答案 0 :(得分:1)
这是一个相对简单的解决方案(基本上是Plutonix建议的)假设每个字典只有1个值,字典键是路径,值是名称:
' temporary dictionary for loop iteration
Dim currentDict As Dictionary(Of String, String)
' assuming each dictionary only has 1 path/name entry, set up 2D string array
Dim myFileArray(,) As String = New String(myFiles.Count - 1, 1) {}
' assuming the dictionary key is the path and the dictionary value is the name,
' iterate through myFiles and extract key/value into 2D array
For i = 0 To myFiles.Count - 1
currentDict = myFiles(i)
myFileArray(i, 0) = currentDict.Keys(0)
myFileArray(i, 1) = currentDict.Values(1)
Next
ProcessFiles(myFileArray)
我玩了一些LINQ查询,但是.ToArray产生锯齿状数组(与多维数组不同),所以如果你绝对需要2D数组,那么走这条路可能是不可行的。 p>
答案 1 :(得分:1)
接受的答案通常是处理它的方法。
但是,如果您有重复的目录(即同一目录中的两个文件),则无法使用目录作为字典的键,因为该键必须是唯一的。
List(Of
... KeyValuePair
,struct
,Tuple
,custom class
或existing class
)
会绕过碰撞。
List(Of KeyValuePair)
接近于词典,因为他们在枚举时会公开KeyValuePair
,您只需用Dictionary(Of String, String)
替换garthhh的答案中的List(Of KeyValuePair(String, String))
避免碰撞。
具体来说,我认为System.IO.FileInfo
可能是您案例的一个类,因为您正在处理文件。所以,使用List(Of System.IO.FileInfo)
...
Dim myFileListFileInfo As New List(Of System.IO.FileInfo) From {
New FileInfo(System.IO.Path.Combine("\\location\Of\File", "filename")),
New FileInfo(System.IO.Path.Combine("\\location\Of\File2", "filename2")),
New FileInfo(System.IO.Path.Combine("\\location\Of\File3", "filename3"))
} ' initialize this way...
' ... or add like this
myFileListFileInfo.Add(New FileInfo(System.IO.Path.Combine("\\location\Of\File4", "filename4")))
Dim myFileArray(myFileListFileInfo.Count - 1, 1) As String
For i = 0 To myFileListFileInfo.Count - 1
myFileArray(i, 0) = myFileListFileInfo(i).DirectoryName
myFileArray(i, 1) = myFileListFileInfo(i).Name
Next
如果你真的只想要一个数组(,),也许它有点过分。正如我所说,你可以使用许多东西来代替类,元组等的FileInfo。