Ich habe eine Klasse namens Employee. in dem es drei automatisch implementierte Eigenschaften und eine Funktion gibt, die die Namen der Angestellten zurückgibt, die Bonusgehalt haben, verwende ich Delegierte, also gibt es keine Logik in dieser Funktion und das ist der Grund, warum diese Klasse und Methode wiederverwendbar ist.Verwirrung in der anonymen Methode
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
Hier ist es mein Hauptverfahren, in dem ich eine Liste der Mitarbeiter zu schaffen und alle Schritte zu tun, wie eine Instanz erstellen und die Methode als Argument übergeben.
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();
So Alle von euch denken, dass, wo meine Methode ist (BonusAvailableFor), in dem ich die logische Arbeit tat alles, was die Unterschrift des Delegierten übereinstimmt? Hier ist sie
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;
}
}
Also dieser Code funktioniert so perfekt schön und wiederkehr die Namen der Mitarbeiter, deren Gehalt> 8000. ich nur anonyme Methode irgendwo gelesen, dass Inline-Ausdruck ist, die verwendet werden können, wo immer ein Delegattyp erwartet wird .Sie bieten uns eine Möglichkeit, Instanz von Delegaten zu erstellen, ohne eine separate Methode schreiben zu müssen ... die Definition sieht gut aus, es wird meine Codezeilen reduzieren, wenn ich dies in meinem Szenario implementieren kann, also wie kann ich es erreichen? < === (Meine Frage) gut ich weiß, ich diesen Ausdruck mit Lambda tun können, oder mit FindAll() vordefinieren funtion in Liste Sammlung Klasse, aber ich bin hier mit anonymer Methode zu tun ..
Ich verstehe nicht, warum Sie nicht nur die Any (e => e.Salary> 8000) -Methode verwenden. Ich verstehe, dass Sie nicht Lambda verwenden möchten, aber warum nicht? – Zorkind
C# 2.0 unterstützt Linq oder anonyme Typen nicht. Wollten Sie die Frage wirklich damit versehen? – stuartd
@stuartd bist du sicher? In meinem Wissen Anonym Methode in C# eingeführt 2 –