I have a generic extension method like following:
public static class Validator
{
public static IEnumerable<string> Validate<T>(IList<T> items)
{
foreach (var item in items)
{
var result = MyValidator.Validate(item);
if (!result.Any()) continue;
foreach (var validationResult in result)
yield return validationResult.ErrorMessage;
}
}
public static IEnumerable<string> Validate<T>(T item)
{
var result = MyValidator.Validate(item);
if (!result.Any()) yield break;
foreach (var validationResult in result)
yield return validationResult.ErrorMessage;
}
}
But when I call the method for single object or collection it calls Validate(T item);
var item = new Person();
var items = new List<Person>();
var v1 = Validator.Validate(item); // calls Validate<T>(T item)
var v2 = Validator.Validate(items); // calls Validate<T>(T item) but should call Validate<T>(IList<T> items)
I wan to call Validate<T>(IList<T> items)
for list.
Why this problem occured?