c# - 将字符串数组转换为字符串以获得 if else 条件

标签 c# string conditional-statements

我正在努力学习,(我是编码的新手)

这是我写的

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(); 

我得到的错误是它

can't convert string[] to string

感谢您的帮助!

最佳答案

好的,有几件事:

你的 UserClass是一个 array .它会保存项目,但除非你附加到它,否则你不能向它写入用户输入。 HereArrays 的引用在来自 MSDN 的 C# 中。

您正在使用 .Contains()string array 上而不是 string .虽然从逻辑上讲,是的,string array 确实包含这些值。虽然,如果它实际运行/编译,所有 if statements将运行 true 而不是从用户输入中选择。

这让我想到了下一件事——你要求 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 存储在 array 中, 只要您检查 array适本地。

而不是检查 string[] userClass array 包含这些项目,因为我们知道它按照我们编写的方式运行,并且如前所述,它将始终运行 true。相反,我们检查是否 user input匹配数组中的某些内容。

我创建了 string input = Console.ReadLine()允许用户输入,然后我检查 input针对 string[] userClass值。我添加了 .ToLower()并将数组值更改为全部小写。这样,如果用户输入 mAgE而不是 Mage , 不会抛出错误。


另一种解决方法,如果您想避免使用 array , 是使用 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;
}

关于c# - 将字符串数组转换为字符串以获得 if else 条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53616313/

相关文章:

c# - 如何将 IQueryable<T> 集合转换为 IMongoQueryable<T>?

templates - MediaWiki 模板中的字符串函数?

c# - 修剪字符串帮助

c - C 中包含条件字段的结构

WIX 目录搜索总是失败

python - 在条件列表理解中使用 or 语句来过滤数据框中的列

c# - 将 float 转换为 UInt32 - 哪个表达式更精确

c# - 如果未找到 UI 元素,如何使测试失败?

c# - 如何在 C# 中从 TKey 获取字典 TValue?

c - 关于使用 scanf 读取字符串