я сделать запрос на MethodInfo[]
где я пытаюсь найти все методы, которые имеют тип возврата void
, и имеет только один параметр в определенного типа. Я хочу сделать это самым минималистичным и самым коротким способом.Сократите этот запрос LINQ с помощью анонимного типа?
Один из способов сделать это будет:
var validMethods = methods.Where(m => m.ReturnType == typeof(void) && m.GetParameters().Length == 1 && m.GetParameters()[0].ParameterType == wantedType);
или
var validMethods = methods
.Where(m => m.ReturnType == typeof(void))
.Where(m.GetParameters().Length == 1 && m.GetParameters()[0].ParameterType == wantedType);
Но есть резервный GetParameters
вызов - один вызов должен быть достаточно. Так я думал, что я мог бы кэшировать, что анонимный тип, как так:
var validMethods = methods
.Where(m => m.ReturnType == typeof(void))
.Select(m => new { Params = m.GetParameters() })
.Where(p => p.Length == 1 && p[0].ParameterType == transition.eventType);
Но это не сработало, я получил ошибки говоря, что это не Length
ни индексатор для анонимного типа p
, который имеет тип ParameterInfo[]
Это самый короткий способ написать этот запрос? если да, как я могу заставить анонимный тип работать? если нет, то какой самый короткий способ сделать это? (Получить все методы ничтожного возвращения, и один из параметров, где что пары являются определенным типа)
Спасибо за любую помощь :)
Спасибо. Как я могу использовать это в другом (точечном) синтаксисе? – vexe
@vexe добавил образец с синтаксисом метода и анонимным типом –
Спасибо :) - Btw Я исправил длину в моем Q, это должно быть 1 вместо 0. – vexe