C# WHy Array.IndexOf return -1
C# WHy does Array.IndexOf return -1
我开始尝试学习c#。
我不明白为什么我使用 Array.IndexOf();
returns -1。
我希望它根据您从用户输入中获得的 player_name
中的字母 return alphabet
中的索引号。我正在尝试遍历
player_name
并捕获该字符在字母表中的索引号。
看看:
using System;
namespace FantasyGame
{
internal class Program
{
static void Main(string[] args)
{
string player_name = null;
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", "æ", "ø", "å", "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", "æ", "ø", "å" };
Console.Write("\nEnter your name: ");
player_name = Console.ReadLine();
string[] password = { };
foreach (char c in player_name)
{
int index = Array.IndexOf(alphabet, c);
Console.WriteLine(Array.IndexOf(alphabet, c));
Console.WriteLine(c);
}
}
}
}
如果我用 "k"
等特定字符串值替换 c
变量,它 return 就是正确的索引号。为什么? ´´´c´´´ 有一个字符串值,对吗?
The c
has a string value, right?
不,它有一个 char
值。你可以看到你在哪里声明了变量:
foreach (char c in player_name)
对此有许多修复。我建议最简单的方法是将 alphabet
设为字符串并使用 string.IndexOf
。或者,为了让您的代码尽可能相似,将 alphabet
设为 char[]
,例如通过使用 String.ToCharArray
:
char[] alphabet = "abcdefghijklmnopqrstuvwxyzæøåabcdefghijklmnopqrstuvwxyzæøå".ToCharArray();
您的 c 不是 string
值,而是 char
替换
int index = Array.IndexOf(alphabet, c);
和
int index = Array.IndexOf(alphabet, c.ToString());
alphabet
是一个字符串数组,所以我们要给Array.IndexOf
的第二个参数传一个字符串
发生这种情况是因为您正在比较 Char
类型的“c”与 String
类型的字母。您可以做的就是像这样将您使用的数组类型更改为 Char[]
。
char[] 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',
'æ', 'ø', 'å', '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', 'æ', 'ø', 'å' };
还要注意引号,字符类型使用单引号 ' ' 但字符串类型使用双引号 " " .
Array.IndexOf()
的 MSDN 文档说
Searches for the specified object and returns the index of its first
occurrence in a one-dimensional array or in a range of elements in the
array.
现在在您的代码中,
如果你仔细观察,你的alphabet
数组是string
的数组
您的代码 int index = Array.IndexOf(alphabet, c)
正在尝试在字母字符串中查找 unicode 字符值,这就是您得到 -1 结果的原因。
要使其工作,alphabet
的类型和 c
的类型需要相同。从某种意义上说,如果 alphabet 是 char[]
那么 c
应该 是 char.
你可以通过两种方式实现,
- 将
alphabet
转换为 char
的数组
- 正在将
c
转换为字符串。
第一种方法,
char[] alphabet = "abcdefghijklmnopqrstuvwxyzæøåabcdefghijklmnopqrstuvwxyzæøå".ToCharArray();
int index = Array.IndexOf(alphabet, c); //here alphabet is a type of char array
第二种方法,
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", "æ", "ø", "å", "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", "æ", "ø", "å" };
int index = Array.IndexOf(alphabet, c.ToString());
我开始尝试学习c#。
我不明白为什么我使用 Array.IndexOf();
returns -1。
我希望它根据您从用户输入中获得的 player_name
中的字母 return alphabet
中的索引号。我正在尝试遍历
player_name
并捕获该字符在字母表中的索引号。
看看:
using System;
namespace FantasyGame
{
internal class Program
{
static void Main(string[] args)
{
string player_name = null;
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", "æ", "ø", "å", "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", "æ", "ø", "å" };
Console.Write("\nEnter your name: ");
player_name = Console.ReadLine();
string[] password = { };
foreach (char c in player_name)
{
int index = Array.IndexOf(alphabet, c);
Console.WriteLine(Array.IndexOf(alphabet, c));
Console.WriteLine(c);
}
}
}
}
如果我用 "k"
等特定字符串值替换 c
变量,它 return 就是正确的索引号。为什么? ´´´c´´´ 有一个字符串值,对吗?
The
c
has a string value, right?
不,它有一个 char
值。你可以看到你在哪里声明了变量:
foreach (char c in player_name)
对此有许多修复。我建议最简单的方法是将 alphabet
设为字符串并使用 string.IndexOf
。或者,为了让您的代码尽可能相似,将 alphabet
设为 char[]
,例如通过使用 String.ToCharArray
:
char[] alphabet = "abcdefghijklmnopqrstuvwxyzæøåabcdefghijklmnopqrstuvwxyzæøå".ToCharArray();
您的 c 不是 string
值,而是 char
替换
int index = Array.IndexOf(alphabet, c);
和
int index = Array.IndexOf(alphabet, c.ToString());
alphabet
是一个字符串数组,所以我们要给Array.IndexOf
发生这种情况是因为您正在比较 Char
类型的“c”与 String
类型的字母。您可以做的就是像这样将您使用的数组类型更改为 Char[]
。
char[] 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',
'æ', 'ø', 'å', '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', 'æ', 'ø', 'å' };
还要注意引号,字符类型使用单引号 ' ' 但字符串类型使用双引号 " " .
Array.IndexOf()
的 MSDN 文档说
Searches for the specified object and returns the index of its first occurrence in a one-dimensional array or in a range of elements in the array.
现在在您的代码中,
如果你仔细观察,你的
的数组alphabet
数组是string
您的代码
int index = Array.IndexOf(alphabet, c)
正在尝试在字母字符串中查找 unicode 字符值,这就是您得到 -1 结果的原因。要使其工作,
alphabet
的类型和c
的类型需要相同。从某种意义上说,如果 alphabet 是char[]
那么c
应该 是 char.你可以通过两种方式实现,
- 将
alphabet
转换为char
的数组
- 正在将
c
转换为字符串。
- 将
第一种方法,
char[] alphabet = "abcdefghijklmnopqrstuvwxyzæøåabcdefghijklmnopqrstuvwxyzæøå".ToCharArray();
int index = Array.IndexOf(alphabet, c); //here alphabet is a type of char array
第二种方法,
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", "æ", "ø", "å", "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", "æ", "ø", "å" };
int index = Array.IndexOf(alphabet, c.ToString());