将 TryParse 与 double 结合使用会显示过载错误?
我正在编写一个程序并使用 double.Try Parse 来检查字符串是否是数字。
class Game{ // declares the class
private static string[,] board = new string[3, 3]{
{" ", " ", " "}, // top row
{" ", " ", " "}, // middle row
{" ", " ", " "} // bottom row
};
private static void print(){
System.Console.WriteLine("\n {0} | {1} | {2} ", board[2, 0], board[2, 1], board[2, 2]);
System.Console.WriteLine("------------");
System.Console.WriteLine(" {0} | {1} | {2} ", board[1, 0], board[1, 1], board[1, 2]);
System.Console.WriteLine("------------");
System.Console.WriteLine(" {0} | {1} | {2} \n", board[0, 0], board[0, 1], board[0, 2]);
}
private static void calculateMoves(){
System.Console.Write("The possible moves are: ");
int n = 1; // this is used to list all possible moves.
for (int i = 0; i < 3; i++){
for (int j = 0; j < 3; j++){
if (board[i, j] == " "){
System.Console.Write("{0} ", n);
}
n++;
}
} // end print possible moves.
System.Console.WriteLine(); // go to next line
}
public static bool isNumeric(string s){ // this functions checks if the input string is numeric.
double Result;
return double.TryParse(s, out Result);
}
static void Main(){
// the main function, the program starts from (this is a method declartion)
System.Console.WriteLine("\nWelcome to theelitenoob's simple tic tac toe game!");
System.Console.WriteLine("Written in C#, released under the GPL.");
System.Console.WriteLine("The board is 3 by 3, Type a number to place a move there.");
System.Console.WriteLine("So 1 is bottom left and 9 is top right, like a standard keypad.\n");
int winner = 0; // there is no winner yet.
// write players piece
System.Console.WriteLine("You are x");
// create the board
int move; // move number
string input; // the string from which move number is got from
while(winner == 0){
print();
calculateMoves();
System.Console.Write("Please type in a move number: ");
input = System.Console.ReadLine();
if(!isNumeric(input)){ // check if input is *not* numeric
// if it isn't, print message and ask for input again.
System.Console.WriteLine("Thats not a valid move, Try again!");
continue;
}
move = System.Convert.ToInt32(input);
/**/
if (move == 1 && board[0, 0] == " ")board[0, 0] = "x";
if (move == 2 && board[0, 1] == " ")board[0, 1] = "x";
if (move == 3 && board[0, 2] == " ")board[0, 2] = "x";
if (move == 4 && board[1, 0] == " ")board[1, 0] = "x";
if (move == 5 && board[1, 1] == " ")board[1, 1] = "x";
if (move == 6 && board[1, 2] == " ")board[1, 2] = "x";
if (move == 7 && board[2, 0] == " ")board[2, 0] = "x";
if (move == 8 && board[2, 1] == " ")board[2, 1] = "x";
if (move == 9 && board[2, 2] == " ")board[2, 2] = "x";
} // end while loop
}
}
然而。它向我显示一个错误:每当我尝试编译时,我都浏览了所有 msdn 并搜索了 google,但不知道如何修复。
这是我得到的错误:
tictactoe.cs(33,23): error CS1501: No overload for method 'TryParse' takes '2' arguments
有谁知道为什么会发生这种情况以及如何解决它?
i was writing a program and using double.Try Parse to check if a string is numeric.
class Game{ // declares the class
private static string[,] board = new string[3, 3]{
{" ", " ", " "}, // top row
{" ", " ", " "}, // middle row
{" ", " ", " "} // bottom row
};
private static void print(){
System.Console.WriteLine("\n {0} | {1} | {2} ", board[2, 0], board[2, 1], board[2, 2]);
System.Console.WriteLine("------------");
System.Console.WriteLine(" {0} | {1} | {2} ", board[1, 0], board[1, 1], board[1, 2]);
System.Console.WriteLine("------------");
System.Console.WriteLine(" {0} | {1} | {2} \n", board[0, 0], board[0, 1], board[0, 2]);
}
private static void calculateMoves(){
System.Console.Write("The possible moves are: ");
int n = 1; // this is used to list all possible moves.
for (int i = 0; i < 3; i++){
for (int j = 0; j < 3; j++){
if (board[i, j] == " "){
System.Console.Write("{0} ", n);
}
n++;
}
} // end print possible moves.
System.Console.WriteLine(); // go to next line
}
public static bool isNumeric(string s){ // this functions checks if the input string is numeric.
double Result;
return double.TryParse(s, out Result);
}
static void Main(){
// the main function, the program starts from (this is a method declartion)
System.Console.WriteLine("\nWelcome to theelitenoob's simple tic tac toe game!");
System.Console.WriteLine("Written in C#, released under the GPL.");
System.Console.WriteLine("The board is 3 by 3, Type a number to place a move there.");
System.Console.WriteLine("So 1 is bottom left and 9 is top right, like a standard keypad.\n");
int winner = 0; // there is no winner yet.
// write players piece
System.Console.WriteLine("You are x");
// create the board
int move; // move number
string input; // the string from which move number is got from
while(winner == 0){
print();
calculateMoves();
System.Console.Write("Please type in a move number: ");
input = System.Console.ReadLine();
if(!isNumeric(input)){ // check if input is *not* numeric
// if it isn't, print message and ask for input again.
System.Console.WriteLine("Thats not a valid move, Try again!");
continue;
}
move = System.Convert.ToInt32(input);
/**/
if (move == 1 && board[0, 0] == " ")board[0, 0] = "x";
if (move == 2 && board[0, 1] == " ")board[0, 1] = "x";
if (move == 3 && board[0, 2] == " ")board[0, 2] = "x";
if (move == 4 && board[1, 0] == " ")board[1, 0] = "x";
if (move == 5 && board[1, 1] == " ")board[1, 1] = "x";
if (move == 6 && board[1, 2] == " ")board[1, 2] = "x";
if (move == 7 && board[2, 0] == " ")board[2, 0] = "x";
if (move == 8 && board[2, 1] == " ")board[2, 1] = "x";
if (move == 9 && board[2, 2] == " ")board[2, 2] = "x";
} // end while loop
}
}
However. it shows me an error: whenever i try to compile, i went through all of msdn and searched google, but can't figure out how to fix.
This is the error i get:
tictactoe.cs(33,23): error CS1501: No overload for method 'TryParse' takes '2' arguments
does anyone know why this happens and how to fix it?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
Double.TryParse 方法 有两个重载:
TryParse(String, NumberStyles, IFormatProvider,双精度)
TryParse(String,双精度)
前者从 .NET 1.1 开始就存在,而后者是在 .NET 2.0 中引入的。
Mono 附带两个编译器:
mcs -- 旨在实现不带泛型的最新 .NET 版本 (<.NET 2.0)
gmcs -- 旨在实现带泛型的最新 .NET 版本 (>= .NET 2.0)
因此 mcs 不知道新的重载。它相当过时,而且没有积极维护。
使用 gmcs 获取最新的 C# 和 .NET 版本。
The Double.TryParse Method has two overloads:
TryParse(String, NumberStyles, IFormatProvider, Double)
TryParse(String, Double)
The former exists since .NET 1.1, while the latter was introduced in .NET 2.0.
Mono ships with two compilers:
mcs -- aims to implement the latest .NET version without generics (< .NET 2.0)
gmcs -- aims to implement the latest .NET version with generics (>= .NET 2.0)
So mcs doesn't know about the new overload. It's pretty outdated and afaik not actively maintained.
Use gmcs for the latest C# and .NET version.
看起来你必须用大写 D 来表示 Double.TryParse。
It looks like you have to say Double.TryParse with a capital D.