#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
, что это anobject
, и sgtz пытается выяснить, что с ним делать, что немного странно. (в вашем примере это похоже на вопрос: «Сколько свойств имеет анонимный класс?»)
Ответ №1:
var a = new Tuple<int, int>(1, 2);
var aType = a.GetType();
var numberOfGenericParameters = aType.GetGenericArguments().Length;