我有一个类代表不同设备上的百分比大小:
Public Class Size
Public Sub New(desktop As Integer, tablet As Integer, mobile As Integer)
'class logic
End Sub
Public Shared Widening Operator CType(input As Integer()) As Size
Return New Size(input(0), input(1), input(2))
End Operator
End Class
自定义运算符允许我使用大括号创建类的实例,例如{100, 75, 50}
。我想告诉Intellisense,数组中元素的数量必须正好为3。
可以在编译时检查input
的长度吗?感谢
答案 0 :(得分:1)
这不是您要求的。但是,如果您使用的是Visual Studio 2017,则可以通过使用元组而不是数组来获得最小的Intellisense支持。这将要求您使用元组表示法;即使用(,,,)
而不是数组表示法{...}
。
Public Class Size
Public Sub New(desktop As Int32, tablet As Int32, mobile As Int32)
End Sub
Public Shared Widening Operator CType(input As (Int32, Int32, Int32)) As Size
Return New Size(input.Item1, input.Item2, input.Item3)
End Operator
End Class
示例用法:
Dim sz As Size = (1, 2, 3) ' no error
sz = (1, 2) ' Error BC30311 Value Of type '(Integer, Integer)' cannot be converted to 'Size'.
答案 1 :(得分:0)
创建自定义类型(例如ThreeIntegers
)并在代码存在于此约束的任何地方使用它。
Public Shared Widening Operator CType(input As ThreeIntegers) As Size
Return New Size(input.Element1, input.Element2, input.Element1)
End Operator
当然,您的自定义类型实际上可能包含已定义的数组(具有合理的默认值),因此您最终调用可能与调用实际数组看起来没有任何不同。由于一些额外的灵活性,我倾向于使用类而不是类型,但概念是相同的。
示例用法是CType(New ThreeIntegers(10,20,30))
,但考虑到函数的简单性,或许{@ 1}}在每种情况下都需要{<1}}吗?