String - это класс, который берет массив char для инициализации, поэтому, когда вы пытаетесь получить элемент по некоторому индексу, он возвращает char.Проверьте класс строки
public sealed class String : IComparable, ICloneable, IConvertible, IComparable<string>, IEnumerable<char>, IEnumerable, IEquatable<string>
{
// Summary:
// Initializes a new instance of the System.String class to the value indicated
// by an array of Unicode characters.
//
// Parameters:
// value:
// An array of Unicode characters.
[SecuritySafeCritical]
public String(char[] value);
}
Также см. Объявление класса String.
public sealed class String : IComparable, ICloneable, IConvertible, IComparable<string>, IEnumerable<char>, IEnumerable, IEquatable<string>
, которое наследуется IEnumerable<char>
.
Внутри класса строки естьэто свойство get, которое возвращает символ при передаче индекса, см. изображение.Что ясно говорит о том, что получает объект System.Char в указанной позиции в текущей System.String
public char this[int index] { get; }