Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

279
Views
C# WHy does Array.IndexOf return -1

I have started trying to learn c#.

I don't understand why my use of Array.IndexOf(); returns -1. I want it to return the index numbers in the alphabet based on the letters in a player_name that you get from user input. I am trying to loop through the characters of the player_name and capture the index number of that character in the alphabet.

Take a look:

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

            }
        }
    }
}

If I replace the c variable with a specific string value such as "k" it returns the correct index number. Why? The ´´´c´´´ has a string value, right?

over 4 years ago · Santiago Trujillo
5 answers
Answer question

0

The c has a string value, right?

No, it has a char value. You can see that where you've declared the variable:

foreach (char c in player_name)

There are numerous fixes for this. I'd suggest the simplest is to just make alphabet a string and use string.IndexOf. Alternatively, to keep your code as similar as possible, make alphabet a char[], e.g. by using String.ToCharArray:

char[] alphabet = "abcdefghijklmnopqrstuvwxyzæøåabcdefghijklmnopqrstuvwxyzæøå".ToCharArray();
over 4 years ago · Santiago Trujillo Report

0

Your c is not a string value, is a char

over 4 years ago · Santiago Trujillo Report

0

Replace

int index = Array.IndexOf(alphabet, c);

with

int index = Array.IndexOf(alphabet, c.ToString());

see the official docs,

alphabet is an array of string, so we should pass a string to the second parameter of Array.IndexOf

over 4 years ago · Santiago Trujillo Report

0

This happens because you are comparing "c" which is of type Char with an alphabet letter which is of type String. What you can do is just change the type of the array you are using to Char[] like this.

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', 'æ', 'ø', 'å' }; 

Also pay attention to the quotes in which char types use single quotes ' ' but string types use double quotes " " .

over 4 years ago · Santiago Trujillo Report

0

MSDN Documentation of Array.IndexOf() says

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.


Now in your code,

  • If you look at closely, your alphabet array is an array of string

  • your code int index = Array.IndexOf(alphabet, c) is trying to find unicode char value in alphabet string and that is why you are getting -1 as a result.

  • To make it work, type of alphabet and type of c needs to be same. Same in the sense, if alphabet is a char[] then c should be char.

  • You can achieve it in two ways,

    1. Converting alphabet as an array of char
    2. Converting c to string.

First Approach,

char[] alphabet = "abcdefghijklmnopqrstuvwxyzæøåabcdefghijklmnopqrstuvwxyzæøå".ToCharArray();
int index = Array.IndexOf(alphabet, c);  //here alphabet is a type of char array

Second Approach,

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());
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!