forked from samus/mongodb-csharp
/
DefaultMemberFinder.cs
51 lines (44 loc) · 1.53 KB
/
DefaultMemberFinder.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
using System;
using System.Collections.Generic;
using System.Reflection;
namespace MongoDB.Configuration.Mapping.Auto
{
/// <summary>
///
/// </summary>
public class DefaultMemberFinder : IMemberFinder
{
///<summary>
///</summary>
public static readonly DefaultMemberFinder Instance = new DefaultMemberFinder();
/// <summary>
/// Initializes a new instance of the <see cref="DefaultMemberFinder"/> class.
/// </summary>
private DefaultMemberFinder()
{
}
/// <summary>
/// Finds the members.
/// </summary>
/// <param name="type">The type.</param>
/// <returns></returns>
public IEnumerable<MemberInfo> FindMembers(Type type)
{
foreach (var prop in type.GetProperties(BindingFlags.Instance|BindingFlags.NonPublic|BindingFlags.Public))
{
var getMethod = prop.GetGetMethod(true);
var setMethod = prop.GetSetMethod(true);
if(getMethod==null || getMethod.IsPrivate || setMethod==null)
continue;
if (setMethod.GetParameters().Length != 1) //an indexer
continue;
yield return prop;
}
foreach (var field in type.GetFields()) //all public fields
{
if (!field.IsInitOnly && !field.IsLiteral) //readonly
yield return field;
}
}
}
}