مثالی از الگوی Delegate Dictionary
نویسنده: محمد صاحب
تاریخ: ۱۳۹۱/۰۸/۱۹ ۱۵:۲۵
آدرس: www.dntips.ir
| مطالب | ۳۶۹۴ |
| نویسندگان | ۲۷۶ |
| گروههای مطالب | ۱۰۲۴ |
| نقشههای راه | ۱۱۹ |
| دورهها | ۱۴ |
| اشتراکها | ۱۷۹۱۴ |
public class Person
{
public int Id { get; set; }
public Gender Gender { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
switch (person.Gender)
{
case Gender.Male:
if (IsMale(person.FirstName))
{
//Isvalid
}
break;
case Gender.Female:
if (IsFemale(person.FirstName))
{
//Isvalid
}
break;
}
var genderFuncs = new Dictionary<Gender, Func<string, bool>>
{
{Gender.Male , (x) => IsMale(x)},
{Gender.Female , (x) => IsFemale(x)}
};
public static bool IsMale(string name)
{
//check...
return true;
}
public static bool IsFemale(string name)
{
//check...
if (name == "Farzad")
{
return false;
}
return true;
}
var dummyPerson = new List<Person>
{
new Person
{Id = 1, Gender = Gender.Male, FirstName = "Mohammad", LastName = "Saheb"},
new Person
{Id = 2, Gender = Gender.Female, FirstName = "Farzad", LastName = "Mojidi"}
};
foreach (var person in dummyPerson)
{
bool isValid = genderFuncs[person.Gender].Invoke(person.FirstName);
}
var query = context.Students.AsQueryable();
if (searchByName)
{
query= query.FindStudentsByName(name);
}
if (orderByAge)
{
query = query.OrderByAge();
}
if (paging)
{
query = query.SkipAndTake(skip, take);
}
return query.ToList();
var searchTypeFuncs = new Dictionary<SearchType, Func<IQueryable<Student>, string, IQueryable<Student>>>
{
{SearchType.FirstName, (x, y) => x.FindStudentsByName(y)},
{SearchType.LastName, (x, y) => x.FindStudentsByLastName(y)}
};
public static IList<Student> SearchStudents(IQueryable<Student> students, SearchType type, string keyword)
{
var result = searchTypeFuncs[type].Invoke(students, keyword);
return result.ToList();
}