我正在开发自定义用户控件。用户控件有一个映射到枚举的属性,不应该有任何默认值,即控件的使用者必须设置它。
财产:
<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,所以这似乎是一个众所周知的问题。
我的问题是,支持此控件所需的所有行为的最佳方法是什么,以及在此属性上保持智能感知?
答案 0 :(得分:5)
我可以重新创建这个问题 - 使枚举可以为空使智能感知停止工作。我想这是因为可以为空的类型是对象。
建议将枚举保持为不可为空。默认值为NotSet
或None
。如果未设置枚举,则可以在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