指定作为参数传递的数组所需的长度

时间:2018-03-31 20:55:38

标签: vb.net operator-overloading

我有一个类代表不同设备上的百分比大小:

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的长度吗?感谢

2 个答案:

答案 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}}吗?