Определение двумерного динамического массива с разными типами - PullRequest
7 голосов
/ 21 декабря 2009

Я хочу создать двухмерный массив другого типа, как я могу добавить к этому массиву два значения, одно из которых - управляющее имя, а второе - логическое значение.

Ответы [ 8 ]

12 голосов
/ 21 декабря 2009

Вы не можете этого сделать. Вместо этого вы должны создать класс, который содержит эти два свойства, затем вы можете создать массив этого типа:

public class MyClass
{
    public string ControlName {get;set;}
    public bool MyBooleanValue {get;set;}
}

public MyClass[] myValues=new MyClass[numberOfItems];

Или, как говорит Андерс, используйте словарь, если одно из свойств предназначено для поиска.

5 голосов
/ 21 декабря 2009

Словарь будет работать для того, что вы пытаетесь сделать.

Dictionary<string, bool> controllerDictionary = new Dictionary<string, bool>();

Для установки значения

if (controllerDictionary.ContainsKey(controllerName))
    controllerDictionary[controllerName] = newValue;
else
    controllerDictionary.Add(controllerName, newValue);

Чтобы получить значение

if (controllerDictionary.ContainsKey(controllerName))
    return controllerDictionary[controllerName];
else
    //return default or throw exception
4 голосов
/ 21 декабря 2009

Вы не можете сделать это с массивом.

Возможно, вам следует использовать Словарь ?

Общий словарь Dictionary<string,bool>, похоже, подходит для вашего описания.

1 голос
/ 15 февраля 2013

Это зависит от того, как вы хотите использовать ваш массив. Вы хотите посмотреть значение по ключу или по его индексу? Конамиман предложил класс. Но класс с двумя типами - это не более чем Dictionary<type of key, type of value>. Вы можете использовать словарь, если хотите получить значение по ключу. Вот так:

Dictionary<string, int> MyDict = new Dictionary<string, int>();
MyDict.Add("Brutus", 16);
MyDict.Add("Angelina", 22);
int AgeOfAngelina = MyDict["Angelina"];

Теперь недостатком словаря является то, что вы не можете перебирать его. Порядок не определен. Вы не можете использовать MyDict[0].Value для получения возраста Брута (который составляет 16 лет).

Вы можете использовать

List<KeyValuePair<string, int>> MyList = new List<KeyValuePair<string, int>>();

для итерации по двумерному массиву двух разных типов, так как List поддерживает итерацию. Но опять же, вы не можете получить возраст Анджелины на MyList["Angelina"].Value, но вам придется использовать MyList[0].Value.

Но вы также можете использовать данные. Но для инициализации таблицы с ее столбцами требуется несколько больше работы.

1 голос
/ 15 февраля 2013

Еще один способ сделать это - создать массив объектов типа, а затем добавить его в массив данных. Вот пример кода:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Collections;
    using System.Collections.Generic;

    namespace Collections
    {
        class Program
        {
            static void Main(string[] args)
            {
                ArrayList ar = new ArrayList();
                object[] o = new object[3];
                // Add 10 items to arraylist
                for (int i = 0; i < 10; i++)
                {
                    // Create some sample data to add to array of objects of different types.
                    Random r = new Random();
                    o[0] = r.Next(1, 100);
                    o[1] = "a" + r.Next(1,100).ToString();
                    o[2] = r.Next(1,100);
                    ar.Add(o);
                }
            }
        }
    }
1 голос
/ 21 декабря 2009

Использовать словарь . Если по какой-то причине вам действительно нужен массив, попробуйте object [,] и приведите его значения к нужным типам.

1 голос
/ 21 декабря 2009

Если вы хотите искать / устанавливать логическое значение по имени элемента управления, вы можете использовать Dictionary<string, bool>.

0 голосов
/ 12 мая 2016

"Многомерный массив - это массив: все элементы во всех измерениях имеют одинаковый тип "

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...