How to list interface methods omitting property accessors

.net, c#, interface, properties, reflection

Solution

You can use the `IsSpecialName` property:

foreach (var m in typeof(IRoadVehicle).GetMethods().Where(x => !x.IsSpecialName))
{
    // ...
}

This removes all methods with a name that is treated somehow special by the compiler. The docs say this about it:

The SpecialName bit is set to flag members that are treated in a special way by some compilers (such as property accessors and operator overloading methods).

Problem

I would like to use reflection to display a list of methods in an interface. ``` public interface IRoadVehicle { int WheelCount { get; } bool IsEmergency(); } ``` I use following code: ``` foreach (var m in typeof(IRoadVehicle).GetMethods()) { Console.WriteLine(m.Name); } ``` However, I also get listed the compiler-generated property accessors if the interface has a property. I would like to differentiate between explicitly-defined methods and property accessors to omit the latter. ``` //output: //get_WheelCount //IsEmergency //desired output: //IsEmergency ``` How can I filter out the property-related methods?

Original source

Related problems