2010-10-25 26 views
5

मुझे किसी प्रकार के पैरामीटर के रूप में एक सामान्य वर्ग में अज्ञात प्रकार को पारित करने का कोई तरीका नहीं मिल रहा है।अज्ञात प्रकार और जेनेरिक

// यह है वर्ग मैं का दृष्टांत करना चाहते

public class ExtArrayStore<T> : IViewComponent 
{ 
    public IQueryable<T> Data { get; set; } 

... // निर्माता वर्ग

public static class ArrayStoreGenerator 
{ 
    public static ExtArrayStore<T> CreateInstance<T>(IQueryable<T> query) 
    { 
     return new ExtArrayStore<T>(); 
    } 
} 

// इस

IQueryable usersQuery= ((from k in bo.usersselect new { userid = k.userid, k.username}).AsQueryable()); 
     var x = ArrayStoreGenerator.CreateInstance(usersQuery); 

उपयोग करने की कोशिश मैं समझ रहा हूं;

विधि ArrayStoreGenerator.CreateInstance (System.Linq.IQueryable) 'के लिए प्रकार के तर्क उपयोग से अनुमानित नहीं किए जा सकते हैं। प्रकार तर्कों को स्पष्ट रूप से

क्या यह प्राप्त करने का कोई तरीका है? (मैं इंटरफेस के बारे में सोच रहा हूं और एक इंटरफ़ेस लौट रहा हूं, लेकिन यह सुनिश्चित नहीं है कि यह काम करेगा या नहीं) क्या कोई भी जेनिक्स के लिए एनन प्रकारों को पार करने में मदद कर सकता है।

+0

क्या आप 'ArrayStoreGenerator' के कार्यान्वयन को प्रदान कर सकते हैं? मुझे इसे Google के साथ नहीं मिल रहा है इसलिए मुझे संदेह है कि यह आपकी खुद की लाइब्रेरी है। –

+0

यह वहां है। – hazimdikenli

उत्तर

6

usersQuery गैर सामान्य IQueryable के रूप में आपके द्वारा लिखा गया जा रहा है क्योंकि आप स्पष्ट रूप से निर्दिष्ट चर की घोषणा में।

इसके बजाय, var usersQuery = ... करें। यह चर को IQueryable<TAnon> के रूप में टाइप करेगा, जो ArrayStoreGenerator.CreateInstance के हस्ताक्षर से मेल खाता है।

3

आपको उपयोगकर्ताओं को varQuery के रूप में परिभाषित करना चाहिए।

2

क्या होगा यदि आप var usersQuery स्थानीय चर के बजाय अपने चर निर्दिष्ट करने की बजाय कोशिश करते हैं?

ToArray साथ
0

प्रयास करें:

var x = ArrayStoreGenerator.CreateInstance(usersQuery.ToArray()); 
संबंधित मुद्दे