gpt4 book ai didi

c# - 有没有一种使用 Console.ReadKey 在值之间进行选择而无需在类型之间进行大量转换的好方法?

转载 作者:太空宇宙 更新时间:2023-11-03 20:46:35 27 4
gpt4 key购买 nike

我使用 Console.ReadKey() 从多个不时变化的选项中进行选择。在这个初始代码片段之前有一个 for 循环,它将出现次数计入 int 类型的计数器变量。

重点是使用 Console.ReadKey() 获取一个 int。

int choice = ReadKey();
Console.WriteLine("");

if (choice < counter)
{
mail.to = result[counter-1].email;
}

通过使用以下方法

static int ReadKey()
{
ConsoleKeyInfo choice = Console.ReadKey();
char convertedchoice = choice.KeyChar;
string convertedchoice2 = convertedchoice.ToString();
int result = TryInt(convertedchoice2);
return result;
}

static int TryInt(string totry)
{
while (true)
{
int result;
if (int.TryParse(totry, out result))
{
return result;
}
Console.WriteLine("Sorry, you need to enter a number. Try again.");
}
}

我尝试使用 ToString(),但这是它最终让我做的方式。所以这对我来说看起来有点无效,因此我真的很感激一些关于如何做不同的指导?

编辑:

我最终得到了以下所有好的答案的组合。非常感谢大家。

static int ReadKey()
{
while (true)
{
ConsoleKeyInfo choice = Console.ReadKey();
if (char.IsDigit(choice.KeyChar))
{
int answer = Convert.ToInt32(choice.KeyChar);
return answer - 48; //-48 because 0 is represented in unicode by 48 and 1 by 49 etc etc
}
Console.WriteLine("\nSorry, you need to input a number");
}
}

最佳答案

对于具有选项 0..9 的菜单系统,这是合理的。不过不是为了读取更大的数字。

使用 char.IsDigit() 可以使您的整个检查逻辑变得容易得多:

if char.IsDigit(convertedchoice)
{
int result = convertedchoice - '0'; // char1 - char2 = int, in this case in 0..9
return result;
}
else ...

关于c# - 有没有一种使用 Console.ReadKey 在值之间进行选择而无需在类型之间进行大量转换的好方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/648555/

27 4 0
文章推荐: html - 更少的样式 : Comma-separated div's nested within media query not applying
文章推荐: python - 使用 lambda、map 和 list 时,如果 Boolean 为 True,如何返回以下位置的列表?
文章推荐: html - 强制将 float