2015-06-12 2 views
3

я хочу сделать стек с двумя разного типаC#: стек с двумя типа элемента

так я стараюсь писать это, но дают ошибку:

Stack<[string,int]> S = new Stack<[string,int]>(); 
S.Push(["aaa",0]); 

я попробовал этот путь раньше:

public class SItem{ 
    public string x; 
    public int y; 

    public SItem(string text,int index){ 
     this.x = text; 
     this.y = index; 
    } 
} 
Stack<SItem> S = new Stack<SItem>(); 
SItem Start = new SItem("aaa",0); 
S.Push(Start); 

но я хочу, чтобы это было очень просто в использовании, как то, что я пишу до

любая идея?

+1

То, что вы написали, прежде чем ISN 't разрешено, поэтому используйте то, что работает для вас, а также второй * (рабочий) * код выглядит более читаемым. – Habib

+0

Нет (комментарий, так как «нет» действительно не рассматривается как ответ). Функциональные языки могут дать вам синтаксис, близкий к тому, что вам нравится - попробуйте F # или Haskell. –

+0

Это часть алгоритма синтаксического анализа и является домашним заданием, которое должно писать C#, есть ли способ создания пользовательского типа? –

ответ

6

Вы можете рассмотреть Tuple:

var stack = new Stack<Tuple<string, int>>(); 
stack.Push(Tuple.Create("string", 0)); 
var item = stack.Pop(); 

Это устраняет необходимость написать собственный класс, а на нижней стороне, а @AlexeiLevenkov прокомментировал, делает код менее читаемым.

+3

Мнение на основе комментариев: 'Tuple' является менее читаемым, чем обычным классом ... –

+0

@AlexeiLevenkov Yep, согласен. Но это не значит, что его никогда нельзя использовать. Просто что-то рассмотреть, не обязательно выбирать. – AlexD

+0

Замечательно спасибо! –

2

Вы можете использовать KeyValuePair или Tuple (в зависимости от версии .Net)

Stack<KeyValuePair<string, int>> stack = new Stack<KeyValuePair<string, int>>(); 
stack.Push(new KeyValuePair<string, int>("string", 5)); 
0

Другой способ сделать это было бы использовать KeyValuePair:

Stack<KeyValuePair<string, int>> stack; 
Смежные вопросы