2012-01-03 4 views
2

를 .NET으로 변환 이것은 내가 그물로 변환하기 위해 노력하고있어 델파이 코드 : I 시도델파이의 System.Copy가

s1 := Copy (s1 , 1,x - 1) + Copy(s1, x + 1,Length(s1)); 

:

s1 = s1.Substring(x - 1, 1) + s1.Substring(s1.Length, x + 1) 

하지만 오류의 경우 인덱스를 얻을 수 범위를 벗어났습니다. 델파이에서 잘 작동합니다.

변환 할 한 줄 추가. s2 : = s2 + chr (3);

답변

7

Substring에 대한 매개 변수가 반대로 표시됩니다. 시작 색인은 Delphi 에서처럼 처음으로옵니다.

델파이 문자열 색인 생성은 1부터 시작합니다. .net 문자열 인덱싱은 0부터 시작합니다. 당신은 고전적인 off-by-one 오류가 있습니다.

마지막으로 Substring의 길이 매개 변수로 느슨하게 재생할 수 없습니다. Delphi의 Copy에서는 임의로 큰 길이 값을 지정할 수 있으며 모든 맨 오른쪽 문자를 얻을 수 있습니다. Substring에서 더 많은 문자를 요구해서는 안됩니다. 그렇게하면 ArgumentOutOfRangeException이 발생합니다. 내가 믿고있어

s1 = s1.Substring(0, x-1) + s1.Substring(x, s1.Length-x) 

이미 x의 범위 s1.Length-1-0에 있음을 보장했다 :

는 당신이 필요합니다. 귀하의 추가 질문에 대해서는

,

s2 := s2 + chr(3); 

s2 = s2 + Chr(3) 
+0

OK로 변환하지만, 해결 위의 내 설명에게이 모든 것을하지 않았거나 당신은 여전히 ​​문제가 있습니까? –

+0

나는 문제가있다. 내가 그 문제에서 설명했던 문제가 아니다. 나는 새로운 질문을 할 것이다. – Ezi