使用GUID扩展图像

时间:2016-01-09 17:24:54

标签: .net vb.net

我希望能够为图像指定GUID,以便我可以在List(Of Image)中可靠地识别此图像。

我希望能够写

Dim nImage As New Image(...)
nImage.GUID = "my guid"

我想我必须使用扩展程序。

有人可以告诉我这是怎么做的吗?

谢谢。

1 个答案:

答案 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

这不是一个友好的标识符:

enter image description here

类方法

创建关联的另一种方法是简单的类。这可能与您实际要求的内容更接近。

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

不是更友好:

enter image description here

这个问题是你可能最终不得不诉诸查询来找到所需的项目,至少使用字典你可以使用密钥快速获取它(guid字符串)。

更好的标识符可能是文件名或图像描述(“洗手”)。