Что такое C # аналог C ++ std :: pair? - PullRequest
262 голосов
/ 03 октября 2008

Мне интересно: что такое аналог C # std::pair в C ++? Я нашел System.Web.UI.Pair класс, но я бы предпочел что-то на основе шаблонов.

Спасибо!

Ответы [ 14 ]

2 голосов
/ 14 октября 2008

Я задавал тот же вопрос только сейчас, после быстрого поиска в Google, и обнаружил, что в .NET существует класс пар, кроме его в System.Web.UI ^ ~ ^ (http://msdn.microsoft.com/en-us/library/system.web.ui.pair.aspx) Боже мой знает, почему они положили это вместо рамок коллекций

1 голос
/ 26 апреля 2017

Помимо пользовательского класса или .Net 4.0 Tuples, начиная с C # 7.0, существует новая функция под названием ValueTuple, которая представляет собой структуру, которую можно использовать в этом случае. Вместо записи:

Tuple<string, int> t = new Tuple<string, int>("Hello", 4);

и доступ к значениям через t.Item1 и t.Item2, вы можете просто сделать это так:

(string message, int count) = ("Hello", 4);

или даже:

(var message, var count) = ("Hello", 4);
1 голос
/ 19 ноября 2009

Библиотека PowerCollections (ранее доступная в Wintellect, но теперь размещенная на Codeplex @ http://powercollections.codeplex.com), имеет общую структуру Pair.

1 голос
/ 23 октября 2009

Для того, чтобы вышеперечисленное работало (мне нужна была пара в качестве ключа словаря). Я должен был добавить:

    public override Boolean Equals(Object o)
    {
        Pair<T, U> that = o as Pair<T, U>;
        if (that == null)
            return false;
        else
            return this.First.Equals(that.First) && this.Second.Equals(that.Second);
    }

и как только я это сделал, я также добавил

    public override Int32 GetHashCode()
    {
        return First.GetHashCode() ^ Second.GetHashCode();
    }

для подавления предупреждения компилятора.

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