Как использовать рефлексию для вызова универсального метода?

В некоторых ситуациях regexp может помочь. Вот пример, который я проверил в Oracle, и он работает.

select * from my_table where REGEXP_LIKE (search_column, 'value1|value2')

Но с ним существует ряд недостатков:

  1. Любой использованный столбец должен быть преобразован в varchar / char, по крайней мере, неявно.
  2. Нужно быть осторожным со специальными символами.
  3. Это может замедлить производительность - в моем случае версия IN использует сканирование индекса и диапазона, а версия REGEXP выполняет полное сканирование.
975
задан Wai Ha Lee 28 November 2015 в 10:41
поделиться

1 ответ

Необходимо использовать отражение, чтобы получить метод для начала, затем "создать" его путем предоставления аргументов типа MakeGenericMethod:

MethodInfo method = typeof(Sample).GetMethod("GenericMethod");
MethodInfo generic = method.MakeGenericMethod(myType);
generic.Invoke(this, null);

Для статического метода, передайте null как первый аргумент Invoke. Это не имеет отношения к общим методам - это - просто нормальное отражение.

, Как отмечено, многое из этого более просто с C# 4 с помощью dynamic - если можно использовать вывод типа, конечно. Не помогает в случаях, где вывод типа не доступен, таков как точный пример в вопросе.

1059
ответ дан Jon Skeet 28 November 2015 в 10:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: