4
ข้อผิดพลาดในการเรียกคอมไพเลอร์ Ambiguous - เมธอดที่ไม่ระบุชื่อและกลุ่มวิธีการที่มี Func <> หรือ Action
ฉันมีสถานการณ์ที่ฉันต้องการใช้ไวยากรณ์กลุ่มวิธีแทนที่จะใช้วิธีการที่ไม่ระบุชื่อ (หรือไวยากรณ์แลมบ์ดา) สำหรับการเรียกใช้ฟังก์ชัน ฟังก์ชั่นนี้มีสองโอเวอร์โหลดหนึ่งที่ใช้เวลาอีกอันหนึ่งใช้Actionเวลา a Func<string>. ฉันสามารถเรียกสองโอเวอร์โหลดได้อย่างมีความสุขโดยใช้วิธีการที่ไม่ระบุชื่อ (หรือไวยากรณ์แลมบ์ดา) แต่ได้รับข้อผิดพลาดของคอมไพเลอร์ของการเรียกใช้ที่ไม่ชัดเจนหากฉันใช้ไวยากรณ์กลุ่มวิธีการ ฉันสามารถแก้ปัญหาได้โดยการแคสต์อย่างชัดเจนไปยังActionหรือFunc<string>แต่ไม่คิดว่าสิ่งนี้จะจำเป็น ใครช่วยอธิบายได้ไหมว่าทำไมต้องมีการแคสต์อย่างชัดเจน ตัวอย่างโค้ดด้านล่าง class Program { static void Main(string[] args) { ClassWithSimpleMethods classWithSimpleMethods = new ClassWithSimpleMethods(); ClassWithDelegateMethods classWithDelegateMethods = new ClassWithDelegateMethods(); // These both compile (lambda syntax) classWithDelegateMethods.Method(() => classWithSimpleMethods.GetString()); classWithDelegateMethods.Method(() => classWithSimpleMethods.DoNothing()); // These also compile (method group with explicit …