C# 将VB.Net代码转换为C时出现逻辑错误#
我有以下VB.Net代码:C# 将VB.Net代码转换为C时出现逻辑错误#,c#,vb.net,loops,code-conversion,C#,Vb.net,Loops,Code Conversion,我有以下VB.Net代码: Dim t as String=“111100111000011101111100101111010011000011000111010000101001110011011010011010000001010011110011001101” 作为整数的Dim i 如果(t.长度Mod 8)为0,则 对于i=1至8-(t.长度Mod 8) t=“0”+t 下一个 如果结束 当我把它转换成C时,它变成: string t=“11110011100001110111110
Dim t as String=“111100111000011101111100101111010011000011000111010000101001110011011010011010000001010011110011001101”
作为整数的Dim i
如果(t.长度Mod 8)为0,则
对于i=1至8-(t.长度Mod 8)
t=“0”+t
下一个
如果结束
当我把它转换成C时,它变成:
string t=“1111001110000111011111001011110100110000111000111010000101001110011011011011011010000010011110011001101”;
int i=0;
如果((t.长度%8)!=0)
{
对于(i=1;ifor
VB中的边界是预先计算的,在执行循环时不会改变。因此,计算一次t.Length Mod 8
,然后使用该值
在C#中,每次都会对条件进行评估,并且由于不断更改t
,t.Length Mod 8
每次都会给出新的值
另外,由于字符串在.NET中是不可变的,因此您的代码最多会生成t
的7个副本。您确实应该这样做:
Dim diff As Integer=t.长度Mod 8
如果差异为0,则
t=新字符串(“0”c,8-差异)&t
如果结束
对于VB中的
边界是预先计算的,并且在执行循环时不会更改。因此,t.Length Mod 8
计算一次,然后使用该值
在C#中,每次都会对条件进行评估,并且由于不断更改t
,t.Length Mod 8
每次都会给出新的值
另外,由于字符串在.NET中是不可变的,因此您的代码最多会生成t
的7个副本。您确实应该这样做:
Dim diff As Integer=t.长度Mod 8
如果差异为0,则
t=新字符串(“0”c,8-差异)&t
如果结束
正如@GSerg在关于预计算的回答中所说的,但是如果不是alt,那么这个代码至少要在整个字符串的开头添加0,如果我理解是8。您应该使用t=t.PadLeft(t.Length+(t.Length%8),'0')
这是itas@GSerg在回答有关预计算的问题时说的,但是如果不是alt,那么这个代码至少要在整个字符串的开头加上0,如果我理解的话,至少是8。应该使用t=t.PadLeft(t.Length+(t.Length%8),“0”)
谢谢你。它现在工作了!!这就是我喜欢stackoverflow.com的原因谢谢你。它现在工作了!!这就是我喜欢stackoverflow.com的原因