15 public string MemberName {
get;
protected set; }
16 public bool ShowIfConditionMet {
get;
protected set; }
19 public abstract bool ShouldShow(
object target);
21 protected static object GetMemberValue(
object target,
string memberName)
24 throw new NullReferenceException(
"Target cannot be null.");
26 if (
string.IsNullOrEmpty(memberName))
27 throw new NullReferenceException(
"MemberName cannot be null.");
29 Type targetType = target.GetType();
31 MemberInfo[] members = targetType.GetMember(memberName);
32 if (members.Length == 0)
33 throw new MissingMemberException(
"Couldn't find member '" + memberName +
"'");
37 switch (members[0].MemberType)
39 case MemberTypes.Field:
40 FieldInfo fieldInfo = targetType.GetField(memberName);
41 memberValue = fieldInfo.GetValue(target);
44 case MemberTypes.Property:
45 PropertyInfo propertyInfo = targetType.GetProperty(memberName);
46 memberValue = propertyInfo.GetValue(target, null);
50 throw new MissingMemberException(
"Member '" + memberName +
"' must be a field or property");
55 protected static bool IsNullable(
object target,
string memberName)
58 throw new NullReferenceException(
"Target cannot be null.");
60 if (
string.IsNullOrEmpty(memberName))
61 throw new NullReferenceException(
"MemberName cannot be null.");
63 Type targetType = target.GetType();
65 MemberInfo[] members = targetType.GetMember(memberName);
66 if (members.Length == 0)
67 throw new MissingMemberException(
"Couldn't find member '" + memberName +
"'");
69 Type memberType = members[0].DeclaringType;
71 if (!memberType.IsValueType)
74 if (Nullable.GetUnderlyingType(memberType) != null)