@Ostic
Программист - любитель

Как передать из функции tuple?

Здравствуйте.
Как из функции передать tuple и, соответственно, в другой функции принять его?
Есть данные: ( int numberOfLine, string Designation, bool isFirstLine )
как описать две функции, которые принимают и возвращают подобные tuple?
  • Вопрос задан
  • 95 просмотров
Решения вопроса 1
mindtester
@mindtester Куратор тега C#
http://iczin.su/hexagram_48
ну я бы не стал заморачиваться с именованием членов кортежа. но если очень хочется, вроде в МСДН все было внятно прописано. гуглим что то типа кортежи C#
пример кода ниже, две функции используют разные способы доступа к элементам кортежей. на мой взгляд самые практичные. ну и задача
как описать две функции, которые принимают и возвращают подобные tuple?
там точно решена
сам код
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace experience_with_tuples
{
    class Program
    {
        static void Main(string[] args)
        {
            var t = (1, "test", true);
            ConOut_tuple(job_with_tuple(t));
            // хотя можно и так. но не забываем про скобки
            ConOut_tuple(job_with_tuple((1, "test", true)));
        }

        static (int, string, bool) job_with_tuple((int, string, bool) t)
        {
            (var i, var s, var b) = t;
            i++;
            s += " successful";
            b = !b;
            return (i, s, b);
        }

        static void ConOut_tuple((int, string, bool) t) =>
            Console.WriteLine(
                t.Item1 + Environment.NewLine +
                t.Item2 + Environment.NewLine +
                $"detected errors: {t.Item3}"
                );
    }
}

выхлоп
mw6Fhhh.png

upd еще об именовании
как только вы хотите именовать члены кортежа, что бы все было строго и логично и через десяток листов кода ясно понимать что это тут у нас?
вам уже нужен не кортеж а класс. хотя иногда лучше структура. но это совсем отдельная и вполне достойная внимания тема.
кортеж классная штука, но она [реально классная] для решения локальных задач в функциональном стиле. в идеале, когда не зависимо от количества строк, и так все сразу ясно и понятно. типа на входе проекция в кортеж, а на выходе сразу декомпозиция. тогда по коду и так видно что происходит.
типа такого
public (int, int) MovePoint(int x, int y)
{
  // bla-bla-bla
  // изменения x, y
  return (x, y);
}
...
(var newX, var newY) = MovePoint(oldX, oldY);
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы