私はEmployeeというクラスを持っています。自動実装された3つのプロパティと、gitボーナス給与の従業員名を返す関数があるので、この関数にロジックがないので、このクラスとメソッドを再利用できる理由があります。匿名メソッドでの混乱
class Employee
{
public int Id { get; set; }
public string Name { get; set; }
public int Salary { get; set; }
public static void BonusForEmp(List<Employee> emp, Bonus Isavailable)
{
foreach (Employee e in emp)
{
if (Isavailable(e))
{
Console.WriteLine(e.Name + " got bonus");
}
}
}
}
delegate bool Bonus(Employee Employes); // Delegate
ここではそれは私が従業員のリストを作成して、インスタンスを作成し、引数としてメソッドを渡すようなすべてのステップをやっている私の主な方法です。
List<Employee> EmpList = new List<Employee>();
EmpList.Add(new Employee() { Id = 1, Name = "A", Salary = 12000});
EmpList.Add(new Employee() { Id = 2, Name = "B", Salary = 7999 });
EmpList.Add(new Employee() { Id = 3, Name = "C", Salary = 1999 });
EmpList.Add(new Employee() { Id = 4, Name = "D, Salary = 20000});
Bonus B = new Bonus(BonusAvailabeFor); //instance of dlegate and pasing method name as an argument
Employee.BonusForEmp(EmpList, B); //using
Console.ReadLine();
だからすべてはどこ私の方法は、私は、デリゲートのシグネチャに一致するすべての論理仕事をしたした(BonusAvailableFor)であることを考えて?ここでは、私はちょうどデリゲート型が期待されるところはどこでも使用することができ、インライン式で匿名メソッドのどこかを読むので、このコードはとても完璧に素敵な作業とその給与> 8000 従業員の名前を返して
public static bool BonusAvailabeFor(Employee eml) // the function with same signature of the delegate here we use our logic.
{
if (eml.Salary > 8000)
{
return true;
}
else
{
return false;
}
}
です彼らは別のメソッドを記述することなくデリゲートのインスタンスを作成する方法を提供します。私のシナリオでこれを実装することができれば、定義を大きくするとコードの行が減ります。 < ===(私の質問) さて私は、リストのコレクションクラスに目的球を事前に定義)(私はラムダ式またはfindAllのでこれを行うことができます知っているが、私は匿名メソッドでそれを行うためにここにいる..
Any(e => e.Salary> 8000)メソッドを使用しない理由はわかりません。私はラムダを使用したくないと思っていますが、どうしてですか? – Zorkind
C#2.0ではLinqや匿名の型はサポートされていません。 – stuartd
@stuartdあなたは本当ですか?私の知識では、匿名メソッドはC#2で導入されました –