可以在智能感知或设计视图中显示Nullable Enum值

时间:2012-10-03 15:08:35

标签: asp.net vb.net enums custom-controls intellisense

我正在开发自定义用户控件。用户控件有一个映射到枚举的属性,不应该有任何默认值,即控件的使用者必须设置它。

财产:

<Description("This is the property description"),
Category("SomeCategory"), Bindable(True)>
Public Property SomeProperty As Enumerations.SomeEnumeration?

枚举:

Namespace Enumerations
    Public Enum SomeEnumeration
        Zero = 0
        One
        Two
    End Enum
End Namespace

支票:

If SomeProperty Is Nothing Then
    Throw New ApplicationException("You must set SomeProperty.")
End If

问题:

所有逻辑都有效。我的问题是,当您尝试从标记设置SomeProperty 时,智能感知中不会显示任何枚举值。我的一位同事发现了this related support request,所以这似乎是一个众所周知的问题。

我的问题是,支持此控件所需的所有行为的最佳方法是什么,以及在此属性上保持智能感知?

2 个答案:

答案 0 :(得分:5)

我可以重新创建这个问题 - 使枚举可以为空使智能感知停止工作。我想这是因为可以为空的类型是对象。

建议将枚举保持为不可为空。默认值为NotSetNone。如果未设置枚举,则可以在getter或初始化代码中抛出异常。

属性

<Description("This is the property description"),
Category("SomeCategory"), Bindable(True)>
Public Property SomeProperty As Enumerations.SomeEnumeration

枚举

Namespace Enumerations
    Public Enum SomeEnumeration
        NotSet = -1
        Zero = 0
        One
        Two
    End Enum
End Namespace

检查

If SomeProperty Is SomeProperty.NotSet Then
    Throw New ApplicationException("You must set SomeProperty.")
End If

答案 1 :(得分:1)

Public Enum SomeEnumeration
    NotSet = -1
    Zero = 0
    One
    Two
End Enum

枚举的默认值为0,因此如果声明SomeEnumeration的变量,则该变量的默认值将为零。  例如;      SomeEnumeration SomeProperty;

SomeProperty的值将是SomeEnumeration.Zero