2011-05-04 53 views
1

有没有什么方法可以在VB.NET中定义一个只接受单打或双打的Generic?我可以定义一个可以采用多种可能值类型的泛型吗? (VB.NET)

我尝试下面的东西,依据是什么,我在网上找到,但没有编译:

Dim target As Nullable(Of {Single, Double}) 
Dim target As Nullable(Of T As {Single, Double}) 
Dim target As Nullable(Of T {Single, Double}) 
Dim target As Nullable(Of Single, Double) 
Dim target As Nullable(Of T As Single, Double) 

我希望指定target可以是一个或仅Double?

回答

3

Public Class NullableFloat(Of T As {Double, Single})是正确的语法,see here在约束下。

但是,此声明指定通用类型T必须实现DoubleSingle,而不是。由于.NET原语是密封的,并且在DoubleSingle之间没有继承关系,所以T不可能满足这两个约束。

由于没有.NET类型既可以是一个DoubleSingle你可以做一些所谓的NullableFloat复杂类型Double类型之一Value属性,但与采取DoubleSingle但是,为什么不使用Nullable(Of Double) setter方法。

+0

是的,缺乏基础的整体和数字类型是一个真正的痛苦;我知道他们正在考虑为每个连接添加未来版本。我没有想过按照你的建议使用多个函数调用,......猜测这可能是最好的想法。只是希望以某种方式不必编写2,3或更多的所有具有相同签名的函数,除了通用参数。 – eidylon 2011-05-04 17:09:23

+0

有一个重新思考,并希望我的新答案是有道理的。 – Jodrell 2011-05-04 17:16:46

+0

恩,没有。 'T'为{Double,Single}'会描述一个'T',它是** BOTH **一个'Double'和一个'Single'同时 - 当然这是不可能的。 “多重约束”条款要求所有约束都为真(“和”),并不意味着任何约束都为真(“或”)。所以正确的答案是“不,没有办法定义一个通用的约束,可以采用几种可能的数字类型。”这与使用Nullable无关。当人们想要创建一个CLASS(T)而不是一个方法或函数时,这尤其令人讨厌 - .Net缺少'Numeric'基类型。 – ToolmakerSteve 2014-10-22 19:50:58

相关问题