Предположим, у меня есть следующая программа:
namespace ReflectionTest
{
public class Example
{
private string field;
public void MethodOne() { }
public void MethodTwo() { }
public string Property
{
get { return field; }
set { this.field = value; }
}
}
class Program
{
static void Main(string[] args)
{
iterate(typeof(Example));
Console.ReadLine();
}
public static void iterate(Type type)
{
MethodInfo[] methods = type.GetMethods(
BindingFlags.DeclaredOnly |
BindingFlags.Instance |
BindingFlags.Public);
foreach (MethodInfo mi in methods)
{
Console.WriteLine(mi.Name);
}
}
}
}
Когда я запускаю программу, я получаю следующий вывод:
MethodOne
MethodTwo
get_Property
set_Property
Я хочу пропустить методы доступа к свойству. Я пробовал с другими BindingFlags
, например, ~BindingFlags.SetProperty
, но безуспешно. На данный момент единственный способ пропустить эти методы - переписать функцию итерации:
public static void iterate(Type type)
{
MethodInfo[] methods = type.GetMethods(
BindingFlags.DeclaredOnly |
BindingFlags.Instance |
BindingFlags.Public);
foreach (MethodInfo mi in methods)
{
if (mi.IsSpecialName) continue;
Console.WriteLine(mi.Name);
}
}
Вы знаете, что BindingFlags
мне следует использовать?
Обновление:
Ну, я должен был объяснить, что проект на самом деле предназначен для автоматического создания шаблонов для модульного тестирования, поэтому я могу пропустить все специальные методы. Спасибо за дополнительную информацию о IsSpecialName:)
LINQ? В самом деле? Вот это да. В любом случае, это проект .NET 2.0, поэтому LINQ (к сожалению) не вариант.