需要帮助将C#转换为vb&引用;数组初始值设定项缺少1个元素“;

需要帮助将C#转换为vb&引用;数组初始值设定项缺少1个元素“;,c#,vb.net,typeof,gettype,C#,Vb.net,Typeof,Gettype,我试图使用3.5框架将以下代码从C#转换到Vb 这是我遇到麻烦的C#代码 MethodInfo mi = typeof(Page).GetMethod("LoadControl", new Type[2] { typeof(Type), typeof(object[]) }); 我以为在VB中会是这样的 Dim mi As MethodInfo = GetType(Page).GetMethod("LoadControl", New Type(2) {GetType(Type), GetTyp

我试图使用3.5框架将以下代码从C#转换到Vb

这是我遇到麻烦的C#代码

MethodInfo mi = typeof(Page).GetMethod("LoadControl", new Type[2] { typeof(Type), typeof(object[]) });
我以为在VB中会是这样的

Dim mi As MethodInfo = GetType(Page).GetMethod("LoadControl", New Type(2) {GetType(Type), GetType(Object())})
但我得到以下错误“数组初始值设定项缺少1个元素”

另一行,我有麻烦,并得到相同的错误是

control = (Control) mi.Invoke(this.Page, new object[2] { ucType, null });
我在vb中尝试过这个,但不起作用

control = DirectCast(mi.Invoke(Me.Page, New Object(2) {ucType, Nothing}), Control)
ucType的定义如下

Dim ucType As Type = Type.[GetType](typeName(1), True, True)

任何帮助都将不胜感激。

将是这样的-

Dim mi As MethodInfo = GetType(Page).GetMethod("LoadControl", New Type(1) {GetType(Type), GetType(Object())})
另一项是—

control = DirectCast(mi.Invoke(Me.Page, New Object(1) {ucType, Nothing}), Control)

会是这样的——

Dim mi As MethodInfo = GetType(Page).GetMethod("LoadControl", New Type(1) {GetType(Type), GetType(Object())})
另一项是—

control = DirectCast(mi.Invoke(Me.Page, New Object(1) {ucType, Nothing}), Control)

对于第一行,您需要将新类型(2)更改为新类型(1)


在VB.Net中,数组初始值设定项中指定的数字是相对于长度的最高可访问索引。您提到的第二行具有相同的问题和解决方案。

对于第一行,您需要将新类型(2)更改为新类型(1)


在VB.Net中,数组初始值设定项中指定的数字是相对于长度的最高可访问索引。您提到的第二行有相同的问题和解决方案。

VB.Net数组是基于0的,但声明使用的是最高索引,而不是项数。因此,索引为0..9的10项数组被声明为项(9)

话虽如此,问题的真正解决方案是让编译器计算出数组长度,如下所示:

Dim mi As MethodInfo = GetType(Page).GetMethod("LoadControl", New Type() {GetType(Type), GetType(Object())})

VB.Net数组是基于0的,但声明时使用的是最高索引,而不是项数。因此,索引为0..9的10项数组被声明为项(9)

话虽如此,问题的真正解决方案是让编译器计算出数组长度,如下所示:

Dim mi As MethodInfo = GetType(Page).GetMethod("LoadControl", New Type() {GetType(Type), GetType(Object())})

在VB.NET中,数组声明采用数组的上界,而不是C#那样的长度(如果你问我的话,这有点傻)。因此,需要将传递到数组声明中的数量减少1(因为数组是从零开始的)。

在VB.NET中,数组声明采用数组的上限,而不是像C一样的长度(如果你问我的话,这有点傻)。因此,您需要将传递到数组声明中的数量减少1(因为数组是从零开始的)。

VB使用上限作为数组的参数

new byte[X]

new byte(X) 'wrong, 1 more element
new byte(X-1) 'correct, kinda confusing
new byte(0 to X-1) 'correct, less confusing

我建议使用(0到X-1)样式,因为它更清晰。在vb6时代,数组(X)可能意味着0到X或1到X,这取决于上下文。VB使用上限作为数组的参数

new byte[X]

new byte(X) 'wrong, 1 more element
new byte(X-1) 'correct, kinda confusing
new byte(0 to X-1) 'correct, less confusing

我建议使用(0到X-1)样式,因为它更清晰。在vb6时代,数组(X)可能表示0到X或1到X,这一点更为重要,具体取决于上下文。

有一个在线版本可供转换
C#到VB,反之亦然。

有一个在线版本可供转换
C#到VB,反之亦然。

谢谢,真不敢相信我错过了。我真的很感谢你的帮助。真不敢相信我错过了。我真的很感谢你的帮助。真不敢相信我错过了。我真的很感谢你的帮助。真不敢相信我错过了。我真的很感谢你的帮助。转换器总是很方便,但它们不会教你很多东西,也不会告诉你为什么要进行更改。我希望我不会看到你到处传播这种联系:-pconverter总是很方便,但它们不会教你很多东西,也不会告诉你为什么要做改变。我希望我不会看到你到处传播这个链接