Массив, который можно использовать с помощью массива ['Name'] в С#

Можете ли вы сделать

array['Name'];

В С#

Вместо

array[0];

Я знаю, что вы можете сделать это на PHP, но есть ли равный для С#, хотя im думаю, что он вряд ли вероятен: (

Ответ 1

он назвал Dictionary в С#. Используя дженерики, вы можете фактически индексировать любой тип. Например:

Dictionary<Person, string> dictionary = new Dictionary<Person, string>();
Person myPerson = new Person(); 
dictionary[myPerson] = "Some String";
...
string someString = dictionary[myPerson];
Console.WriteLine(someString);

Это, очевидно, выводит на консоль "Some String".

Это пример гибкости словаря. Вы можете сделать это со строкой в ​​качестве индекса, как вы просили.

Ответ 2

Массивы не работают так, как в С#, но вы можете добавить свойство indexer в любой класс:

class MyClass
{
    public string this[string key]
    {
        get { return GetValue(key); }
        set { SetValue(key, value); }
    }
}

Затем вы можете написать тип заявлений, которые вы просите:

MyClass c = new MyClass();
c["Name"] = "Bob";

Вот как осуществляется индексированный доступ на основе строк к Dictionary<TKey, TValue>, NameValueCollection и аналогичным классам. Вы также можете реализовать несколько индексов, например, один для индекса и один для имени, вы просто добавляете другое свойство, как указано выше, с другим типом параметра.

В число встроенных классов классов уже есть эти индексы, в том числе:

  • SortedList<TKey, TValue>
  • Dictionary<TKey, TValue>
  • SortedDictionary<TKey, TValue>
  • NameValueCollection
  • Lookup<TKey, TValue>System.Linq)

... и многое другое. Все они предназначены для немного разных целей, поэтому вы хотите прочитать каждый и посмотреть, какой из них подходит для вашего требования.

Ответ 3

Dictionary<string, whatyouwanttostorehere> myDic =
                            new Dictionary<string, whatyouwanttostorehere>();
myDic.Add("Name", instanceOfWhatIWantToStore);   
myDic["Name"];