如何在多个项目中使用扩展方法

时间:2017-10-04 20:39:57

标签: vb.net enums extension-methods

我有一个扩展方法,它应该检索枚举的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中定义的扩展方法?

1 个答案:

答案 0 :(得分:1)

我发现了我的问题。当我宣布模块ExtensionMethods时,我没有在其上放置访问修饰符,因此默认为&#34; Friend&#34;。添加&#34; Public&#34;访问修饰符将模块声明暴露给其他项目。傻傻的我:/