2009-05-04 2 views
1

3.5 프레임 워크를 사용하여 Visual C#에서 다음 코드를 사용하려고합니다.C#에서 VB로 변환하는 데 도움이 필요합니다. "배열 이니셜 라이저 1 요소가 없습니다."

다음은 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에서 작동하지만 작동하지 않습니다. 어떤 도움을 크게 감상 할 수

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

다음과 같이

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

ucType가 정의됩니다.

답변

1

그것은 다음과 같이 될 것입니다 -

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

다른 하나가 될 것입니다 - 당신은 새로운 유형 (1) (2)에 새로운 유형을 변경해야 할 첫 번째 줄에 들어

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

감사합니다. 나는 그것을 놓쳤다 고 생각할 수 없습니다. 정말 감사드립니다. –

3

.

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

VB.Net에서 배열 초기화 프로그램에 지정된 숫자는 길이에 비해 액세스 가능성이 가장 높은 인덱스입니다. 언급 한 두 번째 줄에는 동일한 문제와 해결책이 있습니다.

6

VB.Net 배열은 0부터 시작하지만 항목 수보다는 최상위 인덱스를 사용하여 선언됩니다. 따라서 0..9로 인덱싱 된 10 개 항목의 배열은 항목 (9)으로 선언됩니다.

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

+1 좋은 대답, 설명 및 최선의 해결책 – STW

+0

감사합니다 내가 그것을 놓쳤다는 것을 믿을 수 없다. 정말 감사드립니다. –

5

는 VB.NET에서 배열 선언이의 상한를 취 말했다와

이 문제에 대한 진정한 해결책은과 같이, 배열 길이 밖으로 컴파일러 그림을 수 있도록하는 것입니다 배열, C#과 같은 길이가 아닙니다 (당신이 저에게 묻는다면 어리석은 것입니다). 이 때문에 배열 선언에 전달 된 숫자를 1 씩 줄여야합니다 (배열은 0부터 시작합니다).

2

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) 스타일을 사용하는 것이 좋습니다. 배열 (X)가 컨텍스트에 따라 0에서 X 또는 1에서 X를 의미 할 수있는 vb6 일 동안 훨씬 더 중요했습니다.

1

http://converter.telerik.com에는 C#을 VB로 또는 그 반대로 변환하는 온라인 버전이 있습니다.

+0

컨버터는 항상 편리하지만, 당신에게 많은 것을 가르치거나 왜 * 변경을했는지 알려주지 않습니다. 나는 당신이이 링크를 사방에 퍼지는 것을 보지 않기를 바랍니다 :-P – STW

+0

또한이 코드 라인이 잘못되었습니다. –

관련 문제