我希望能够为图像指定GUID,以便我可以在List(Of Image)中可靠地识别此图像。
我希望能够写
Dim nImage As New Image(...)
nImage.GUID = "my guid"
我想我必须使用扩展程序。
有人可以告诉我这是怎么做的吗?
谢谢。
答案 0 :(得分:4)
我不认为Extension方法可以做你认为它做的事情。它的标签告诉我们:
...扩展方法使您能够在不创建新派生类型的情况下将方法“添加”到现有类型...
您希望添加类似属性的内容,而不是方法。因为,您真正想要的是将GUID
与图片相关联的方式,简单的类甚至是Dictionary(Of Guid, Image)
可能就是您所需要的。可以看出,Guid是代码中最不友好的标识符。
我将使用Guid.ToString()
,因为您无法在代码中真正键入Guid
(您可以从字符串中解析一个)。
Private imageCol As Dictionary(Of String, Image)
...
imageCol = New Dictionary(Of String, Image)
' zfiles is just some images to work with
For Each s As String In zFiles
imageCol.Add(Guid.NewGuid.ToString, Image.FromFile(s))
Next
这不是一个友好的标识符:
创建关联的另一种方法是简单的类。这可能与您实际要求的内容更接近。
Public Class ImageItem
' ToDo: make readonly
Public Property [Image] As Image
Public Property Id As String
Public Sub New(i As Image, g As Guid)
Image = i
Id = g.ToString
End Sub
Public Overrides Function ToString() As String
Return Id
End Function
End Class
这实际上只是一种更加漫长的方式来完成字典的工作。
Private imgs As List(Of ImageItem)
...
imgs = New List(Of ImageItem)
For Each s As String In zFiles
imgs.Add(New ImageItem(Image.FromFile(s), Guid.NewGuid))
Next
不是更友好:
这个问题是你可能最终不得不诉诸查询来找到所需的项目,至少使用字典你可以使用密钥快速获取它(guid字符串)。
更好的标识符可能是文件名或图像描述(“洗手”)。