количество элементов в кортеже

#c# #.net #generics

#c# #.net #обобщения

Вопрос:

Просто интересно, есть ли простой способ узнать, сколько элементов содержится в классе кортежей

например.

  var a = new Tuple<int,int>(1,2);
  

но сколько там элементов? Возможно, нам все равно, попытаемся ли мы выполнить приведение с помощью ключевого слова as

  var a1 = a as Tuple<int>
 if(a1!=null)

 var a2 = a as Tuple<int,int>
 if(a2!=null)
  

Сразу после небольшой обратной связи. Много ли людей используют Tuple?

Комментарии:

1. Иногда я использую кортеж, но поскольку параметры Кортежа не имеют имен, я предпочитаю использовать анонимные типы, когда я могу сохранить использование с помощью одного метода. В большинстве случаев я использую Tuple в сочетании с Enumerable.Zip .

2. В каком сценарии вы получаете кортеж и еще не знаете его тип? Вы пишете dynamic код?

3. Я знаю типы, но тип не говорит мне о намерении. new {StockCount = 4, BackOrders = 5,} гораздо более самоочевидно, чем Tuple.Create(4, 5) .

4. @Kobi: да, это динамическая потребность. Хотя, небольшой набор классов для покрытия всех ожидаемых случаев, вероятно, лучше в этой ситуации. Я просто продолжаю возвращаться к кортежу. Не уверен, почему. Возможно, для меня это объединяет DB и общие понятия в одном месте. В настоящее время я не являюсь большим пользователем типа anon, поскольку обычно предпочитаю более конкретное определение. т.Е. Если у вас нет ORM для определенных учреждений, вам нужно быть осторожным с LINQ. Я нахожу Tupple / Pair / Triple полезными.

5. @Albin — Очевидно, я не смог передать свой вопрос. Мне было интересно, как sgtz получил кортеж, не зная его типа (и, следовательно, его длины). Похоже a , что это an object , и sgtz пытается выяснить, что с ним делать, что немного странно. (в вашем примере это похоже на вопрос: «Сколько свойств имеет анонимный класс?»)

Ответ №1:

 var a = new Tuple<int, int>(1, 2);
var aType = a.GetType();
var numberOfGenericParameters = aType.GetGenericArguments().Length;