public IsSatisfied ( object datum ) : bool | ||
datum | object | The datum to be checked by this criteria instance. |
리턴 | bool |
public bool IsSatisfied(object datum)
{
bool satisfied = false;
MethodInfo method = datum as MethodInfo;
if (method != null)
{
bool isParamArray = false;
Type paramArrayType = null;
ParameterInfo[] parametersBeingChecked = method.GetParameters();
if (parametersBeingChecked.Length > 0)
{
ParameterInfo lastParameter = parametersBeingChecked[parametersBeingChecked.Length - 1];
isParamArray = lastParameter.GetCustomAttributes(typeof(ParamArrayAttribute), false).Length > 0;
if (isParamArray)
{
paramArrayType = lastParameter.ParameterType.GetElementType();
}
}
if (parametersBeingChecked != null
&& parametersBeingChecked.Length == _parameters.Length)
{
satisfied = true;
for (int i = 0; i < _parameters.Length; ++i)
{
Type sourceType = _parameters[i];
Type typeBeingChecked = parametersBeingChecked[i].ParameterType;
if (!typeBeingChecked.IsAssignableFrom(sourceType))
{
if (isParamArray && i == _parameters.Length - 1)
{
if (!paramArrayType.IsAssignableFrom(sourceType))
{
satisfied = false;
break;
}
}
else
{
satisfied = false;
break;
}
}
}
}
else if (isParamArray && (_parameters.Length >= parametersBeingChecked.Length - 1))
{
satisfied = true;
for (int i = 0; i < parametersBeingChecked.Length - 1; ++i)
{
Type sourceType = _parameters[i];
Type typeBeingChecked = parametersBeingChecked[i].ParameterType;
if (!typeBeingChecked.IsAssignableFrom(sourceType))
{
satisfied = false;
break;
}
}
for (int i = parametersBeingChecked.Length - 1; i < _parameters.Length; ++i)
{
Type sourceType = _parameters[i];
if (!paramArrayType.IsAssignableFrom(sourceType))
{
satisfied = false;
break;
}
}
}
}
return satisfied;
}
public void IsSatisfied() { MethodArgumentsCriteria criteria = new MethodArgumentsCriteria( new Object[] { "Bruno", DateTime.Now, new TestObject("Bruno", 29) }); MethodInfo method = GetType ().GetMethod ("BoJangles"); Assert.IsTrue (criteria.IsSatisfied (method), "Was not satisified with a method that takes a whole buncha parameters."); method = GetType().GetMethod ("BadBobbyBoJangles"); Assert.IsFalse (criteria.IsSatisfied (method), "Was satisified with a (bad) method that takes a whole buncha parameters."); }