教科书问题,但我已经完成了谷歌搜索,但我找不到任何东西。
给定一个名为 的自定义属性SomeAttribute
,您如何在 VB.NET 中执行以下操作?
void SomeMethod<[Some] T>()
{
}
我试过这个:
Sub SomeMethod(<Some> Of T)()
End Sub
和
Sub SomeMethod(Of <Some> T)()
End Sub
但两者都无法编译,错误指向<Some>
.
教科书问题,但我已经完成了谷歌搜索,但我找不到任何东西。
给定一个名为 的自定义属性SomeAttribute
,您如何在 VB.NET 中执行以下操作?
void SomeMethod<[Some] T>()
{
}
我试过这个:
Sub SomeMethod(<Some> Of T)()
End Sub
和
Sub SomeMethod(Of <Some> T)()
End Sub
但两者都无法编译,错误指向<Some>
.
考虑到这里的沉默,并且因为我真的需要一个答案,我深入研究了VB.NET Language Specification。
它从未明确说明是否支持此功能,但它确实有一些正式的语法定义表明 VB.NET 不支持此功能。
具体来说,第 9.2.1 节为方法声明定义了以下产生式:
SubSignature ::= Sub Identifier [ TypeParameterList ]
[ OpenParenthesis [ ParameterList ] CloseParenthesis ]
在 9.2.5 中,参数定义如下:
ParameterList ::=
Parameter |
ParameterList Comma Parameter
Parameter ::=
[ Attributes ] [ ParameterModifier+ ] ParameterIdentifier [ As TypeName ]
[ Equals ConstantExpression ]
第 13.3 节定义TypeParameterList
:
TypeParameterList ::=
OpenParenthesis Of TypeParameters CloseParenthesis
TypeParameters ::=
TypeParameter |
TypeParameters Comma TypeParameter
TypeParameter ::=
[ VarianceModifier ] Identifier [ TypeParameterConstraints ]
VarianceModifier ::=
In | Out
TypeParameterConstraints ::=
As Constraint |
As OpenCurlyBrace ConstraintList CloseCurlyBrace
ConstraintList ::=
ConstraintList Comma Constraint |
Constraint
Constraint ::= TypeName | New | Structure | Class
属性出现在参数列表中(对于函数,在返回类型中),但 TypeParameterList 完全没有与属性相关的任何内容。
因此,我将继续声称 VB.NET 10(随 VS2012 提供)不支持泛型类型参数的属性。