我有一个扩展方法,它应该检索枚举的Description属性值并返回与该属性关联的字符串。这是代码:
<Extension()>
Public Function GetEnumDescription(Of T)(ByVal e As T) As String
If e.GetType().IsEnum Then
Dim type As Type = e.GetType()
Dim values As Array = [Enum].GetValues(type)
For Each Val As Integer In values
If Val = Convert.ToInt32(e) Then
Dim memInfo = type.GetMember(type.GetEnumName(Val))
Dim descriptionAttribute As DescriptionAttribute = memInfo(0).GetCustomAttributes((New DescriptionAttribute).GetType(), False).FirstOrDefault()
If descriptionAttribute IsNot Nothing Then
Return descriptionAttribute.Description
End If
End If
Next
Return String.Empty
End If
Throw New InvalidOperationException("Caller is not an Enum")
End Function
当我在同一个项目中定义的各种类中使用它时,它就像一个魅力。但是,当我在另一个项目(相同的解决方案,让它称之为ProjectB)工作时,我导入包含此扩展方法(ProjectA)的项目并尝试使用它,它不起作用。< / p>
所以说我在ProjectB中声明了一个名为MyEnum的枚举。设置如下:
Public Enum MyEnum
<Description("This is value1's description")> value1
<Description("This is value2's description")> value2
End Enum
我在使用MyEnum的ProjectB中工作,我想获取description属性的值。我在ProjectB中添加对ProjectA的引用,然后添加Import语句以在我的类中使用ProjectB。当我尝试做这样的事情时:
Dim val As MyEnum = MyEnum.value1
MessageBox.Show(val.GetEnumDescription())
我希望看到一个消息框,上面写着&#34;这是value1的描述&#34;,但我得到的错误是
&#39; GetEnumDescription&#39;不是&#39; MyEnum&#39;
的成员
所以我的问题是如何在其他项目中使用ProjectA for Enums中定义的扩展方法?
答案 0 :(得分:1)
我发现了我的问题。当我宣布模块ExtensionMethods时,我没有在其上放置访问修饰符,因此默认为&#34; Friend&#34;。添加&#34; Public&#34;访问修饰符将模块声明暴露给其他项目。傻傻的我:/