साथ सामान्य विधि तो, मुझे यकीन है कि यह कहीं वहाँ से पहले उत्तर दिया गया है, लेकिन मैं इसे कहीं भी नहीं मिल सका। उम्मीद कुछ जेनरिक गुरु कर सकते हैं।कार्रवाई <T> पैरामीटर
public interface IAnimal{}
public class Orangutan:IAnimal{}
public void ValidateUsing<T>(Action<T> action) where T : IAnimal
{
Orangutan orangutan = new Orangutan();
action(orangutan); //Compile error 1
//This doesn't work either:
IAnimal animal = new Orangutan();
action(animal); //Compile error 2
}
- तर्क प्रकार 'आरंगुटान' नहीं आबंटित पैरामीटर के लिए प्रकार 'टी'
- तर्क प्रकार 'IAnimal' है नहीं आबंटित प्रकार पैरामीटर के लिए 'टी'
संपादित है: आधार यूरी और के अन्य सुझावों पर, मैं कर सकता कुछ कास्टिंग जैसे:
public void ValidateUsing<T>(Action<T> action) where T : IAnimal
{
Orangutan orangutan = new Orangutan();
action((T)(IAnimal)orangutan);
//This doesn't work either:
IAnimal animal = new Orangutan();
action((T)animal);
}
बात मैं करना चाहता था इस तरह ValidateUsing विधि कॉल किया गया था:
ValidateUsing(Foo);
दुर्भाग्य से, foo इस तरह दिखता है:
private void Foo(Orangutan obj)
{
//Do something
}
मैं स्पष्ट रूप से प्रकार निर्दिष्ट करने के लिए है जब मैं ValidateUsing कॉल
ValidateUsing<Orangutan>(Foo);
धन्यवाद bdukes, मैंने सिर्फ उदाहरण के रूप में ओरंगुटन का उपयोग किया। शायद एक बुरा है। मैं किसी भी IAnimal के साथ कार्रवाई को कॉल करने में सक्षम होना चाहता हूँ। "असली" कोड में, IAnimal कक्षा में एक निजी क्षेत्र के रूप में संग्रहीत किया जाता है। तो, मैं वास्तव में कुछ भी तत्काल नहीं कर रहा हूँ। –