在C#中,这段Java代码的等价物是什么?

时间:2014-10-15 15:18:20

标签: java c# code-conversion

我偶然发现了website,我试图测试这个想法,我不知道Java,所以我尝试将其转换为C#。一切似乎微不足道但我在执行样本时遇到了一些异常。

我想我必须在这里做错事。生成该异常的方法如下:

 static void setSolution(String newSolution)
 {
        solution = new byte[newSolution.length()];
        // Loop through each character of our string and save it in our byte
        // array
        for (int i = 0; i < newSolution.length(); i++){
            String character = newSolution.substring(i, i + 1);
            if (character.contains("0") || character.contains("1")){
                solution[i] = Byte.parseByte(character);
            } else {
                solution[i] = 0;
            }
        }
    }

这是我基于C#的方法:

public static void SetSolution(string newSolution)
{
    solution = new byte[newSolution.Length];
    // Loop through each character of our string and save it in our byte
    // array
    for (int i = 0; i < newSolution.Length; i++)
    {
        string character = newSolution.Substring(i, i + 1);
        if (character.Contains("0") || character.Contains("1"))
        {
            solution[i] = Byte.Parse(character);
        }
        else
        {
            solution[i] = 0;
        }
    }
}

我是否正确转换?因为转换,例如,1000到字节没有意义!因为它是静态的,所以字符串保留了它的旧值,因此在第4次迭代中它会吐出OverFlow Exception

  

未处理的类型&#39; System.OverflowException&#39;发生在   mscorlib.dll中

     

其他信息:价值太大或太小了   无符号字节。

我也试过

solution[i] =  Convert.ToByte(newSolution[i]);

这似乎也不是。

修改

这是输入字符串:

 "1111000000000000000000000000000000000000000000000000000000001111"

2 个答案:

答案 0 :(得分:6)

Java和C#之间的子字符串函数不同:

爪哇:

public String substring(int beginIndex, int endIndex)

C#:

public string Substring(int startIndex, int length)

转换此行以反映它在Java中所做的事情。

等价物是:

public static void SetSolution(string newSolution)
{
    solution = new sbyte[newSolution.Length];
    // Loop through each character of our string and save it in our byte
    // array
    for (int i = 0; i < newSolution.Length; i++)
    {
        string character = newSolution.Substring(i, 1); 
        if (character.Contains("0") || character.Contains("1"))
        {
            solution[i] = SByte.Parse(character);
        }
        else
        {
            solution[i] = 0;
        }
    }
}

答案 1 :(得分:5)

问题是如何转换为C#,我个人会使用Linq:

public static void SetSolution(string newSolution)
{
    solution = newSolution.Select(c => c == '1' ? (byte)1 : (byte)0).ToArray();
}

我相信上面的代码应该在功能上等同于你的java代码段,因为基本上除了'1'之外的所有字符都转换为0。