C# Array.IndexOf 为什么返回 -1

Kar*_*erg 2 c# arrays string types loops

我已经开始尝试学习c#了。

\n

我不明白为什么我使用返回 -1。\n我希望它根据从用户输入获得的a 中的字母Array.IndexOf();返回 a 中的索引号。我试图循环遍历 \n 的字符并捕获该字符在字母表中的索引号。alphabetplayer_nameplayer_name

\n

看一看:

\n
using System;\n\nnamespace FantasyGame\n{\n    internal class Program\n    {\n        static void Main(string[] args)\n        {\n            string player_name = null;\n\n            string[] alphabet = { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "\xc3\xa6", "\xc3\xb8", "\xc3\xa5", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "\xc3\xa6", "\xc3\xb8", "\xc3\xa5" };\n\n            Console.Write("\\nEnter your name: ");\n            player_name = Console.ReadLine();\n\n\n            string[] password = { };\n            foreach (char c in player_name)\n            {\n                int index = Array.IndexOf(alphabet, c);\n                Console.WriteLine(Array.IndexOf(alphabet, c));\n                Console.WriteLine(c);\n\n            }\n        }\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

如果我c用特定的字符串值替换变量,例如"k"它会返回正确的索引号。为什么?\xc2\xb4\xc2\xb4\xc2\xb4c\xc2\xb4\xc2\xb4\xc2\xb4 有一个字符串值,对吧?

\n

Jon*_*eet 9

\n

c一个字符串值,对吗?

\n
\n

不,它有它的char价值。您可以看到声明变量的位置:

\n
foreach (char c in player_name)\n
Run Code Online (Sandbox Code Playgroud)\n

对此有许多修复方法。我建议最简单的方法是制作alphabet一个字符串并使用string.IndexOf. 或者,为了使您的代码尽可能相似,请创建alphabet一个char[],例如使用String.ToCharArray

\n
char[] alphabet = "abcdefghijklmnopqrstuvwxyz\xc3\xa6\xc3\xb8\xc3\xa5abcdefghijklmnopqrstuvwxyz\xc3\xa6\xc3\xb8\xc3\xa5".ToCharArray();\n
Run Code Online (Sandbox Code Playgroud)\n