Из Enumerable.WhereSelectEnumerableIterator в Список <string> - PullRequest
0 голосов
/ 06 февраля 2019

Мне нужно передать метод с коллекцией типа List<string> из ApiDescription объектов:

public class AddTags : IOperationFilter
{
   public void Apply(Operation operation, OperationFilterContext context)
   {
      if (context.ApiDescription.TryGetMethodInfo(out MethodInfo methods) == true)
      {
         var test = methods.CustomAttributes
            .Where(x => x.AttributeType == typeof(CustomTag))
            .Select(x => x.NamedArguments.Where(n => n.MemberName.Equals("Tag"))
                          .Select(t => (string)t.TypedValue.Value))
            .ToList();
      }
   }
}

Переменная test возвращает коллекцию типа System.Linq.Enumerable.WhereSelectEnumerableIterator<System.Reflection.CustomAttributeNamedArgument, string>, но мне нужнорезультат типа List<string>.

Пользовательский тег применяется в контроллерах следующим образом:

[CustomTag(Tag = "TEST")]
public ActionResult MyAction()

1 Ответ

0 голосов
/ 06 февраля 2019

Попробуйте:

var tags = methods.GetCustomAttributes(typeof(CustomTag), true)
                  .OfType<CustomTag>()
                  .Select(attribute => attribute.Tag)
                  .ToList();

Кстати, CustomTag действительно должно быть названо CustomTagAttribute.Он все еще будет работать как [CustomTag].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...