c# - 将字符串数组转换为 if else 条件的字符串
问题描述
我正在努力学习,(我是编码新手)
我写了这个
static void Main(string[] args)
{
string username = "James";
string[] Userclass = new string[3] { "Mage", "Warrior", "Assasin" };
Console.WriteLine("What class will you be? You can choose from Mage, Warrior, Or Assasin: ");
if (Userclass.Contains("Mage"))
{
String Message = "You are a strong Willed Mage " + username;
Console.WriteLine(Message);
}
if (Userclass.Contains("Warrior"))
{
String Message = "Your are a valiant Warrior " + username;
Console.WriteLine(Message);
}
if (Userclass.Contains("Assasin"))
{
String Message = "You are a vigilant Assasin " + username;
Console.WriteLine(Message);
}
Console.ReadLine();
}
但是,如果我定义:
string Userclass = Console.Readline();
我得到它的错误
无法将字符串 [] 转换为字符串
谢谢你的帮助!
解决方案
好的,有几件事:
你UserClass
的是一个array
. 它将保存项目,但除非您附加到它,否则您不能将用户输入写入它。这是Arrays
来自 MSDN 的 C# 参考。
您正在使用.Contains()
astring array
而不是 a string
。虽然从逻辑上讲,是的,但string array
确实包含这些值。虽然,如果它真的运行/编译,所有的if statements
都会运行真实而不是从用户输入中选择。
这让我想到了我的下一件事——你要求但从未在如图所示的方法中user input
真正允许它。Main()
最常见的方式(我见过)是这样的:
string input = Console.ReadLine();
哪个,我看到您正在尝试实施,所以这不是问题:)
此代码应该适用于(我将分解我的更改):
static void Main(string[] args)
{
string userName = "James";
string[] userClass = new string[3] { "mage", "warrior", "assassin" };
Console.WriteLine("What class will you be? You can choose from Mage, Warrior or Assassin:");
string input = Console.ReadLine();
if (input.ToLower() == userClass[0])
{
string Message = "You are a strong Willed Mage " + userName;
Console.WriteLine(Message);
}
else if (input.ToLower() == userClass[1])
{
string Message = "Your are a valiant Warrior " + userName;
Console.WriteLine(Message);
}
else if (input.ToLower() == userClass[2])
{
string Message = "You are a vigilant Assassin " + userName;
Console.WriteLine(Message);
}
else
Console.WriteLine("No proper class selected...");
Console.ReadLine();
}
string userName
与您的保持相同string[] userClass
(我已将大写更改为驼峰式)。只要您正确检查,将这些userClass
s 存储在 a中就没有问题(我认为)。array
array
Instead of checking if the string[] userClass
array contains these items, because we know it does as we've written it and as stated before, it would always run true. Instead, we check to see if the user input
matches something within the array.
I have created string input = Console.ReadLine()
to allow for user input, and then I check input
against the string[] userClass
values. I have added .ToLower()
and changed the array values to all lower case. This way, if a user inputs mAgE
instead of Mage
, there will not be an error thrown.
Another way to go about it, if you are wanting to avoid using an array
, is to use a switch:
switch (input.ToLower())
{
case "mage":
Console.WriteLine($"You are a strong Willed Mage {userName}");
//assign user class
break;
case "warrior":
Console.WriteLine($"Your are a valiant Warrior {userName}");
//assign user class
break;
case "assassin":
Console.WriteLine($"You are a vigilant Assasin {userName}");
//assign user class
break;
}
推荐阅读
- java - 初始化问题
- php - 将数据发送到表时保持表单打开
- php - PHP 用户友好的错误处理
- python - 确保工作人员在加载下一个任务之前完成池中的任务以提高内存效率
- react-native - 为什么我不能直接访问 React Native [REDUX] 中的数组对象
- sql-server - SQL Server \ CONTAINS FORMSOF INFLECTIONAL Phrase \ 未按预期工作
- python - 重新排序压缩矩阵元素
- mysql - 我可以在 Go 中参数化创建语句吗?
- java - 暂停活动后 HttpURLConnection 将不起作用
- javascript - FizzBuzz for Javascript:console.log 如何知道何时打印一个或另一个变量?