2013-07-05 2 views
0

Интересно, можно ли создать двумерный List разных типов. Другими словами, мне интересно, если что-то подобное можно:Двумерный список разных типов

List<T, U> list = new List<T, U>(); 

где T и U любые два различных типа.

Можно ли достичь этого, не прибегая к struct s или class es?

+0

Что вы пытаетесь сделать с этим? –

+0

Вы пытаетесь получить что-то вроде Словаря? Или, пожалуйста, объясните себе немного больше? – Styxxy

+0

Я пытаюсь сохранить список индексов и значений типа 'int' и' string', соответственно. – Raptor

ответ

4

Это звучит для меня как то, что вы ищете является Dictionary<T,V>:

var dictionary = new Dictionary<int, string>(); 
dictionary[3] = "three"; 
dictionary[7] = "seven"; 
foreach(var keyValuePair in dictionary) 
{ 
    Console.WriteLine("{0}: {1}", keyValuePair.Key, keyValuePair.Value); 
} 
// 3: three 
// 7: seven 
0

Первый подход: наследование. Но вы можете пойти и просто создать List<Object>. Объекту все равно, что вы туда бросаете. Но ограничивая это двумя классами, нет, это невозможно.

+2

Это плохая идея на многих уровнях. Он может положить что угодно, но он не сможет получить доступ к каким-либо свойствам, не отбрасывая их. И для любого двузначного «объекта» вам нужен класс или структура, поэтому также можно продолжить и создать класс (который задает вопрос, который не требуется). Независимо, если вы хотите Список объектов, может также использовать старый 'ArrayList', но советуйте против него. –

+0

Я знаю, но это, безусловно, работает. Но, увидев другие ответы, я мог бы неправильно понять этот вопрос. –

3

Вы могли бы сделать что-то вроде этого, но я не уверен, если это то, что вам нужно:

List<Tuple<int, string>> list = new List<Tuple<int, string>>(); 
list.Add(Tuple.Create<int, string>(2, "two")); 
+0

Это хорошее решение, если OP должен иметь возможность отображать целое число в несколько строк. «Словарь» требует одного значения за ключ. –

+1

@ p.s.w.g Я не согласен с этим. Вы можете просто иметь «Словарь >» (или даже «Hashset », если он хочет уникальности внутри этого ключа). Проблема со списком кортежей - это ключевой поиск в O (N). Теперь это может не быть проблемой, если он просто выполняет итерацию, но как только вы захотите найти ключ, используйте словарь. –

+0

@SimonBelanger Да, конечно. Это то, с чем я тоже поеду. Я сказал, что это было хорошее решение, а не то, что это было идеально. –

3

Вы можете использовать Dictionary<T, U>

var list = new Dictionary<T, U>(); 

Где T d U типы, которые вы хотите.

Смежные вопросы