วิธีการทั่วไปที่มีข้อ จำกัด หลายอย่าง


251

ฉันมีวิธีการทั่วไปซึ่งมีสองพารามิเตอร์ทั่วไป ฉันพยายามรวบรวมรหัสด้านล่าง แต่มันไม่ทำงาน มันเป็นข้อ จำกัด ของ. NET หรือไม่? เป็นไปได้ไหมที่จะมีข้อ จำกัด หลายอย่างสำหรับพารามิเตอร์ที่แตกต่างกัน?

public TResponse Call<TResponse, TRequest>(TRequest request)
  where TRequest : MyClass, TResponse : MyOtherClass

คำตอบ:


402

เป็นไปได้ที่จะทำเช่นนี้คุณเพิ่งได้ไวยากรณ์ผิดเล็กน้อย คุณต้องการ a whereสำหรับแต่ละข้อ จำกัด แทนที่จะคั่นด้วยเครื่องหมายจุลภาค:

public TResponse Call<TResponse, TRequest>(TRequest request)
    where TRequest : MyClass
    where TResponse : MyOtherClass

8

นอกจากคำตอบหลักโดย @LukeH ด้วยการใช้งานอื่นเราสามารถใช้หลายอินเตอร์เฟสแทนคลาส (หนึ่งคลาสและอินเทอร์เฟซนับ n) เช่นนี้

public TResponse Call<TResponse, TRequest>(TRequest request)
  where TRequest : MyClass, IMyOtherClass, IMyAnotherClass

หรือ

public TResponse Call<TResponse, TRequest>(TRequest request)
  where TRequest : IMyClass,IMyOtherClass

1

นอกจากคำตอบหลักโดย @LukeH ฉันมีปัญหากับการฉีดแบบพึ่งพาและใช้เวลาพอสมควรในการแก้ไขปัญหานี้ มันมีค่าที่จะแบ่งปันสำหรับผู้ที่ประสบปัญหาเดียวกัน:

public interface IBaseSupervisor<TEntity, TViewModel> 
    where TEntity : class
    where TViewModel : class

มันถูกแก้ไขด้วยวิธีนี้ ในตู้คอนเทนเนอร์ / บริการกุญแจคือ typeof และเครื่องหมายจุลภาค (,)

services.AddScoped(typeof(IBaseSupervisor<,>), typeof(BaseSupervisor<,>));

นี่ถูกกล่าวถึงในคำตอบนี้


2
คำตอบนี้ไม่เกี่ยวข้องกับข้อ จำกัด ประเภทเลย มันเกี่ยวกับประเภททั่วไปที่ไม่ได้ผูกไว้และวิธีสะกดคำเหล่านั้นใน C # stackoverflow.com/a/2173115/2157640 stackoverflow.com/a/6607299/2157640
Palec
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.