问题描述
这是我要转换为.net的Delphi代码:
This is the Delphi code I'm trying to convert to .net:
s1 := Copy ( s1 , 1,x - 1) + Copy(s1, x + 1,Length(s1));
我尝试过:
s1 = s1.Substring(x - 1, 1) + s1.Substring(s1.Length, x + 1)
但是当索引超出范围时出现错误.在Delphi中工作正常.
But I get error's when the index is out of range. in Delphi it works fine.
添加了一行以进行转换.s2:= s2 + chr(3);
Added one line to convert.. s2 := s2 + chr(3);
推荐答案
您要设置的参数 Substring
颠倒了,开始索引排在第一位,就像在Delphi中一样.
Your parameters to Substring
are reversed–the start index comes first just as in Delphi.
Delphi字符串索引基于1..net字符串索引从0开始.您会遇到经典的一对一"错误.
Delphi string indexing is 1-based. The .net string indexing is 0-based. You have the classic off-by-one error.
最后,对于 Substring
的length参数,您不能玩得那么松散.在Delphi的 Copy
中,您可以指定一个任意大的长度值,您将获得所有最右边的字符.在 Substring
中,您所输入的字符数不能超过要求的数量.如果这样做,则会引发 ArgumentOutOfRangeException
.
Finally, you cannot play so loose with the length parameter to Substring
. In Delphi's Copy
you can specify an arbitrarily large length value and you will get all the right-most characters. In Substring
you must not ask for more characters than there are. If you do then ArgumentOutOfRangeException
is thrown.
您需要这个:
s1 = s1.Substring(0, x-1) + s1.Substring(x, s1.Length-x)
我假设您已经确保 x
在 0
到 s1.Length-1
的范围内.
I'm assuming you have already ensured that x
is in the range 0
to s1.Length-1
.
关于您的其他问题
s2 := s2 + chr(3);
翻译为
s2 = s2 + Chr(3)
这篇关于将delphi的System.Copy转换为.net的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!