একাধিক প্রতিবন্ধকতা সহ জেনেরিক পদ্ধতি


251

আমার একটি জেনেরিক পদ্ধতি রয়েছে যার দুটি জেনেরিক পরামিতি রয়েছে। আমি নীচের কোডটি সংকলনের চেষ্টা করেছি কিন্তু এটি কার্যকর হয় না। এটা কি। নেট সীমাবদ্ধতা? বিভিন্ন পরামিতিগুলির জন্য একাধিক বাধা থাকা কি সম্ভব?

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

উত্তর:


402

এটি করা সম্ভব, আপনি কেবল সিনট্যাক্সটি কিছুটা ভুল পেয়ে গেছেন। whereকমা দিয়ে আলাদা করার পরিবর্তে আপনার প্রতিটি প্রতিবন্ধকতার প্রয়োজন :

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

8

অন্য ব্যবহারের সাথে @ লুকএইচ এর মূল উত্তর ছাড়াও, আমরা ক্লাসের পরিবর্তে একাধিক ইন্টারফেস ব্যবহার করতে পারি। (এক শ্রেণি এবং এন গণনা ইন্টারফেস) এর মত

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

অথবা

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

1

@ লুকএইচ এর মূল উত্তর ছাড়াও, আমি নির্ভরতা ইনজেকশন দিয়েছি এবং এটি ঠিক করতে আমাকে কিছুটা সময় নিয়েছে। যারা একই সমস্যাটির মুখোমুখি তাদের পক্ষে এটি ভাগ্যবান:

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

এটি এইভাবে সমাধান করা হয়। পাত্রে / পরিষেবাগুলিতে কীটি টাইপফুল এবং কমা (,)

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

এই উত্তরে এটি উল্লেখ করা হয়েছিল ।


2
এই উত্তরটি মোটেই টাইপ সীমাবদ্ধতার সাথে সম্পর্কিত নয়। এটি আনবাউন্ড জেনেরিক প্রকার এবং সেগুলিতে কীভাবে সি # তে তাদের বানান করা যায় সে সম্পর্কে। স্ট্যাকওভারফ্লো. com
পেরেক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.