2012-06-03 2 views
0

У меня есть структура, которая выглядит следующим образом:шаблон структуры внутри шаблон структуры

public struct Pair<T,U> { 
    public readonly T Fst; 
    public readonly U Snd; 

    public Pair(T fst, U snd) { 
     this.Fst = fst; 
     this.Snd = snd; 
    } 

    public override String ToString() { 
     return "(" + Fst +", " + Snd + ")"; 
    } 
} 

Теперь мне нужно объявить переменное «назначение» для типа Pair<Pair<int,int>, String>.

  1. как его инициализировать?
  2. Как я могу получить доступ к встрече.Fst.Snd? (Его тип должен быть INT)
+3

В качестве боковой точки, генераторы C# не являются такими же, как шаблоны C++, хотя они выглядят одинаково. Они ведут себя совершенно по-другому! – thecoop

+0

Если вы используете .NET 4, вы можете использовать встроенные типы 'Tuple' вместо того, чтобы создавать собственную' Pair'. –

ответ

0

Инициализация может быть сделано как этот

Pair<Pair<int, int>, String> appt = new Pair<Pair<int, int>, string>(new Pair<int,int>(1,3),"test"); 

Тогда вы можете получить доступ к:

appt.Fst; // type pair<int,int> 
appt.Snd; // type string 
appt.Fst.Snd; // type int 
2

Я не совсем уверен, что понять, где проблема , Разве это не работает?

Pair<Pair<int, int>, string> s = new Pair<Pair<int, int>, string>(new Pair<int, int>(5, 10), "hello"); 
Console.WriteLine(s.Fst.Snd); 
+0

Я бы предпочел иметь метод 'Pair.Create' (как и' Tuple.Create') и использовать 'var', чтобы сделать код более чистым/понятным/короче:' var s = Pair.Create (Pair.Create (5, 10), «привет»); –

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