2010-06-08 3 views
7

Мне нужно что-то похожее на List<String, Int32, Int32>. Список поддерживает только один тип за раз, а словарь - только по два. Есть ли чистый способ сделать что-то подобное выше (многомерный общий список/сборник)?Есть что-то вроде List <String, Int32, Int32> (многомерный общий список)

+0

Интересно дублирование Int32. Что ты пытаешься сделать? –

+0

Мне нужно связать два разных числа семантически одной строкой, которая затем будет использоваться для визуализации данных в представлении. – Alex

+0

Я думаю, что @Alex имеет «java» фон, такой как я. –

ответ

14

Лучший способ создать для него контейнер т.е. класса

public class Container 
{ 
    public int int1 { get; set; } 
    public int int2 { get; set; } 
    public string string1 { get; set; } 
} 

затем в коде, где вам это нужно

List<Container> myContainer = new List<Container>(); 
+4

+1, поскольку он не требует кортежа .Net4 и может быть тривиально реализован с классом, но -1, потому что вам следует избегать публичных полей в классе. Реализуйте как свойство и используйте простой '{get; set;} 'вместо этого. –

+0

Возможно, вам придется переопределить Equals и GetHashCode –

+1

Тип Контейнер должен быть неизменяемой структурой, поскольку он представляет только значения. –

13

В .NET 4 вы можете использовать List<Tuple<String, Int32, Int32>>.

+0

К сожалению, я на .NET 3.5, но я буду помнить об этом 4.0! – Alex

1

Ну, вы не можете сделать это сезам C# 3.0, используйте Tuples, если вы можете использовать C# 4.0, как указано в других ответах.

Однако в C# 3.0 - создать Immutable structure и обернуть все виды ins ins внутри структуры и передать тип структуры в качестве аргумента общего типа в ваш список.

public struct Container 
{ 
    public string String1 { get; private set; } 
    public int Int1 { get; private set; } 
    public int Int2 { get; private set; } 

    public Container(string string1, int int1, int int2) 
     : this() 
    { 
     this.String1 = string1; 
     this.Int1 = int1; 
     this.Int2 = int2; 
    } 
} 

//Client code 
IList<Container> myList = new List<Container>(); 
myList.Add(new Container("hello world", 10, 12)); 

Если вам интересно, зачем создавать неизменные структур - checkout here.

0

На основе вашего комментария кажется, что вам нужна структура с двумя целыми числами, которые хранятся в словаре с помощью строкового ключа.

struct MyStruct 
{ 
    int MyFirstInt; 
    int MySecondInt; 
} 

... 

Dictionary<string, MyStruct> dictionary = ... 
+0

Предполагается, что строки должны быть уникальными. –