我偶然发现了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"
答案 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。