2

在一个简单的 C# 控制台应用程序中,我有以下内容:

class Program

public static void Main()
{
    string s = Console.ReadLine(); //User enters the string: "integer, space, integer". Eg., "3 3"
    string[,] myArray = new string[s[0], s[0]];
.
.
.
}

调试时,myArray 的值会显示 string[53, 53],但我期待的是 string[3, 3]。但是,如果我使用 Console.WriteLine(s[0]),它会打印“3”。

我试过了

string[,] myArray = new string[(int)s[0], (int)s[0]];

结果相同。

53从哪里来?

4

2 回答 2

6

s[0]返回 a char( 的第一个字符string),如果您将 achar转换为 an int,那么您将获得 char 的字符代码,而不是您期望的数字。试试这个:

string s = Console.ReadLine(); //User enters the string: "integer, space, integer". Eg., "3 3"
string[,] myArray = new string[int.Parse(s[0].ToString()), int.Parse(s[0].ToString())];

注意:最好使用int.TryParse而不是int.Parse,因为int.Parse如果给定的字符串不能转换为 a ,则会引发异常int,但int.TryParse返回 a bool

string s = Console.ReadLine(); //User enters the string: "integer, space, integer". Eg., "3 3"
int i1;
int i2;
if (int.TryParse(s[0].ToString(), out i1) && int.TryParse(s[0].ToString(), out i2))
{
    string[,] myArray = new string[i1, i2];
    // your other code
}
else
{
    Console.WriteLine("Unable to convert the char to an int.");
}
于 2013-09-08T12:46:42.493 回答
2

你将不得不将你的字符串分成两个数字部分

string s = "12 34";
string parts[] = s.Split();
// Now parts[0] contains "12"
//     parts[1] contains "34"

int i1, i2;
if (parts.Length == 2 &&
    Int32.TryParse(parts[0], out i1) &&
    Int32.TryParse(parts[1], out i2) )
{
    ...
}
于 2013-09-08T13:53:22.207 回答