private static MemberInfo SelectSliceMember(MemberInfo[] found, ref object[] args, SetOrGet sliceKind)
{
if (1 == found.Length) return found[0];
MethodBase[] candidates = new MethodBase[found.Length];
for(int i = 0; i < found.Length; ++i)
{
MemberInfo member = found[i];
PropertyInfo property = member as PropertyInfo;
if (null == property) MemberNotSupported(member);
MethodInfo method = sliceKind == SetOrGet.Get ? GetGetMethod(property) : GetSetMethod(property);
candidates[i] = method;
}
object state = null;
return
Type.DefaultBinder.BindToMethod(DefaultBindingFlags | BindingFlags.OptionalParamBinding, candidates, ref args, null,
null, null, out state);
}