Рубрики

ValueTuple в C #

ValueTuple — это структура, представленная в C # 7.0, которая представляет тип значения Tuple . Он уже включен в .NET Framework 4.7 или более позднюю версию. Это позволяет хранить набор данных, который содержит несколько значений, которые могут или не могут быть связаны друг с другом. Он может хранить элементы от 0 до 8 и может хранить элементы разных типов. Вы также можете хранить повторяющиеся элементы в значении кортежа.

Зачем нам нужен ValueTuple?

У нас уже есть кортежи в C #, которые используются для хранения нескольких значений, но у кортежей есть некоторые ограничения, эти ограничения исправлены в ValueTuple. Или мы можем сказать, что ValueTuple является улучшенной версией Tuples в C # . Это преодолевает следующие ограничения кортежей:

  • Tuple имеет ссылочный тип, но ValueTuple имеет тип значения.
  • Tuple не предоставляет соглашений об именах, но ValueTuple обеспечивает строгие соглашения об именах.
  • В Tuples вам не разрешено создавать кортеж с нулевым компонентом, но в ValueTuple вам разрешено создавать кортеж с нулевыми элементами.
  • Производительность ValueTuple лучше, чем Tuple. Потому что ValueTuple предоставляет облегченный механизм для возврата нескольких значений из существующих методов. И синтаксис ValueTuple более оптимизирован, чем Tuples.
  • ValueTuple обеспечивает большую гибкость для доступа к элементам кортежей значений с помощью деконструкции и ключевого слова _ . Но Tuple не может предоставить концепцию деконструкции и ключевое слово _.
  • В ValueTuple такие элементы, как item1 и item2, являются полями. Но в Tuple это свойства.
  • В ValueTuple поля являются изменяемыми. Но в Tuple поля доступны только для чтения.

Создание ValueTuple

В отличие от Tuple, ValueTuples предоставляет простой механизм для создания и инициализации ValueTuples. Вы можете создать ValueTuples, используя следующие 3 способа:

  • Использование конструктора: вы можете создать ValueTuple с помощью конструктора, предоставляемого ValueTuple <T> Struct. Где вы можете хранить элементы от одного до восьми с их типом.

    Синтаксис:

    // Constructor for creating one element
    ValueTuple<T1>(T1)
    
    // Constructor for creating two elements
    ValueTuple<T1, T2>(T1, T2)
    .
    .
    .
    
    // Constructor for creating eight elements
    ValueTuple<T1, T2, T3, T4, T5, T6, T7, TRest>(T1, T2, T3, T4, T5, T6, T7, TRest)    
    

    Пример:

    // C # программа для иллюстрации того, как
    // создать кортеж значения, используя
    // ValueTuple конструктор.

    using System;

      

    class GFG {

      

        // Основной метод

        static public void Main()

        {

      

            // ValueTuple с одним элементом

            ValueTuple<int> ValTpl1 = new ValueTuple<int>(345678);

      

            // ValueTuple с тремя элементами

            ValueTuple<string, string, int> ValTpl2 = new ValueTuple<string,

                                            string, int>("C#", "Java", 586);

      

            // ValueTuple с восемью элементами

            ValueTuple<int, int, int, int, int, int, int, ValueTuple<int> > ValTpl3 = new ValueTuple<int,

                                      int, int, int, int, int, int, ValueTuple<int> >(45, 67, 65, 34, 34,

                                                                        34, 23, new ValueTuple<int>(90));

        }

    }

  • Использование метода Create: Когда мы используем конструктор структуры ValueTuple <T> для создания кортежа значений, нам необходимо предоставить тип каждого элемента, хранящегося в кортеже значений, что делает ваш код громоздким. Таким образом, C # предоставляет другую структуру ValueTuple, которая содержит статические методы для создания объекта кортежа значения без указания типа каждого элемента.

    Синтаксис:

    // Method for creating an empty value tuple
    Create();
    
    // Method for creating 1-ValueTuple
    Create<T1>(T1)
    .
    .
    .
    
    // Method for creating 8-ValueTuple
    Create<T1, T2, T3, T4, T5, T6, T7, TRest>(T1, T2, T3, T4, T5, T6, T7, T8)
    
    

    Пример:

    // C # программа для создания значения кортежа
    // используя метод Create

    using System;

      

    public class GFG {

      

        // Основной метод

        static public void Main()

        {

      

            // Создание 0-ValueTuple

            // Использование метода Create ()

            var Valtpl1 = ValueTuple.Create();

      

            // Создание 3-ValueTuple

            // Используем метод Create (T1, T2, T3)

            var Valtpl2 = ValueTuple.Create(12, 30, 40, 50);

      

            // Создание 8-ValueTuple

            // Использование метода Create (T1, T2, T3, T4, T5, T6, T7, T8)

            var Valtpl3 = ValueTuple.Create(34, "GeeksforGeks"

                          'g', 'f', 'g', 56.78, 4323, "geeks");

        }

    }

  • Использование круглых скобок (): это самая простая форма для создания ValueTuples с использованием круглых скобок (), и элементы размещаются между ними. И элементы хранятся двумя разными способами:
    • Именованный член: ValueTuple позволяет вам создать кортеж, в котором каждому компоненту разрешено иметь свое собственное имя. Так что вы можете получить доступ к этому компоненту с помощью их имени. Это делает вашу программу более читабельной и легко запоминающейся. Вы можете назначить имена членам левой или правой стороны, но не обеим сторонам. Если вы присвоили имена обеим сторонам, то левая сторона имеет приоритет над правой, как показано ниже:

      Пример 1:

      // C # программа для проиллюстрированного именованного члена

      using System;

        

      public class GFG {

          static public void Main()

          {

              (int age, string Aname, string Lang) author = (23, "Sonia", "C#");

          }

      }

      Пример 2:

      // C # программа для проиллюстрированного именованного члена

      using System;

        

      public class GFG {

        

          static public void Main()

          {

              var author = (age : 23, Aname

                            : "Sonia", Lang

                            : "C#");

          }

      }

    • Безымянный элемент: в ValueTuples безымянные члены — это те элементы, у которых нет имен. Они просто созданы без имени. Как показано ниже:

      Пример 1:

      // C # программа для проиллюстрированного UnNamed члена

      using System;

        

      public class GFG {

          static public void Main()

          {

              var author = (20, "Siya", "Ruby");

          }

      }

      Пример 2:

      // C # программа для проиллюстрированного UnNamed члена

      using System;

        

      public class GFG {

          static public void Main()

          {

              ValueTuple<int, string, string> author = (20, "Siya", "Ruby");

          }

      }

Доступ к членам ValueTuple

Здесь мы узнаем, как получить доступ к именованным и неназванным членам ValueTuples.

  • Доступ к неназванным элементам. В ValueTuple безымянные элементы доступны с помощью имен свойств элемента по умолчанию, таких как Item1, Item2, Item3 и т. Д. Как показано в следующем примере

    Пример:

    // C # программа для иллюстрации того, как
    // доступ к неназванным членам ValueTuple

    using System;

      

    public class GFG {

      

        // Основной метод

        static public void Main()

        {

      

            // ValueTuple с тремя элементами

            var author = (20, "Siya", "Ruby");

      

            // Доступ к ValueTuple

            // Используем свойство Item по умолчанию

            Console.WriteLine("Age:" + author.Item1);

            Console.WriteLine("Name:" + author.Item2);

            Console.WriteLine("Language:" + author.Item3);

        }

    }

  • Доступ к именованным элементам: в ValueTuples именованные элементы используются в соответствии с их именами. Нет необходимости обращаться к этим именованным элементам с помощью свойства элемента по умолчанию. Как показано в приведенном ниже примере, ValueTuple содержит три элемента: Book_id, Author_name и Book_name. И мы напрямую получаем доступ к этим элементам в соответствии с их именами.

    Пример:

    // C # программа для иллюстрации, как получить доступ
    // именованные члены ValueTuple

    using System;

      

    public class GFG {

      

        // Основной метод

        static public void Main()

        {

      

            // ValueTuple с тремя элементами

            var library = (Book_id : 2340, Author_name

                           : "Arundhati Roy", Book_name

                           : "The God of Small Things");

      

            // Доступ к ValueTuple

            // по именам

            Console.WriteLine("Book Id: {0}", library.Book_id);

            Console.WriteLine("Author Name: {0}", library.Author_name);

            Console.WriteLine("Book Name: {0}", library.Book_name);

        }

    }

    Выход:

    Book Id: 2340
    Author Name: Arundhati Roy
    Book Name: The God of Small Things
    

Возвращая ValueTuple

В C # вам разрешено возвращать ValueTuple из метода. Как показано в следующем примере, метод TouristDetails возвращает ValueTuple с 3 элементами:

Пример:

// C # программа для иллюстрации того, как
// метод возврата ValueTuple

using System;

  

public class GFG {

  

    // Этот метод возвращает туристические данные

    static(int, string, string) TouristDetails()

    {

        return (384645, "Sophite", "USA");

    }

  

    // Основной метод

    static public void Main()

    {

  

        // Сохраняем данные, предоставленные методом TouristDetails

        var(Tourist_Id, Tourist_Name, Country) = TouristDetails();

  

        // Данные дисплея

        Console.WriteLine("Tourist Details: ");

        Console.WriteLine($ "Tourist Id: {Tourist_Id}");

        Console.WriteLine($ "Tourist Name: {Tourist_Name}");

        Console.WriteLine($ "Country: {Country}");

    }

}

Выход:

Tourist Details: 
Tourist Id: 384645
Tourist Name: Sophite
Country: USA

Рекомендуемые посты:

ValueTuple в C #

0.00 (0%) 0 votes