परिदृश्य:प्रकार की वस्तु कास्ट करने में असमर्थ 'System.Object []' को 'MyObject []', क्या देता है?
मैं वर्तमान में एक समान वर्ग में 3 समान वेबसाइकिलों को सारणी लिख रहा हूं। प्रत्येक webservice वस्तुओं की एक सेट का खुलासा करता है जो समानता साझा करते हैं। मैंने मध्यस्थ वस्तुओं का एक सेट बनाया है जो समानता का फायदा उठाते हैं। हालांकि मेरी परत में मुझे वेब सेवा ऑब्जेक्ट्स और मेरी ऑब्जेक्ट्स के बीच कनवर्ट करने की आवश्यकता है।
मैं रन टाइम पर उचित प्रकार बनाने के लिए प्रतिबिंब का उपयोग किया है इससे पहले कि मैं तो जैसे वेब सेवा से फोन करना:
public static object[] CreateProperties(Type type, IProperty[] properties)
{
//Empty so return null
if (properties==null || properties.Length == 0)
return null;
//Check the type is allowed
CheckPropertyTypes("CreateProperties(Type,IProperty[])",type);
//Convert the array of intermediary IProperty objects into
// the passed service type e.g. Service1.Property
object[] result = new object[properties.Length];
for (int i = 0; i < properties.Length; i++)
{
IProperty fromProp = properties[i];
object toProp = ReflectionUtility.CreateInstance(type, null);
ServiceUtils.CopyProperties(fromProp, toProp);
result[i] = toProp;
}
return result;
}
यहाँ मेरी बुला कोड है, मेरी सेवा कार्यान्वयन में से एक से:
Property[] props = (Property[])ObjectFactory.CreateProperties(typeof(Property), properties);
_service.SetProperties(folderItem.Path, props);
इसलिए प्रत्येक सेवा के लिए एक अलग "संपत्ति" वस्तु जो मैं अपने IProperty इंटरफेस के अपने खुद के कार्यान्वयन के पीछे छिपाने के उजागर करता है।
प्रतिबिंब कोड इकाई वस्तुओं जिसका तत्वों उचित प्रकार के होते हैं की एक सरणी के उत्पादन परीक्षण में काम करता है। लेकिन बुला कोड में विफल रहता है:
System.InvalidCastException: प्रकार की डाली वस्तु करने में असमर्थ 'System.Object []' टाइप करने के लिए 'MyProject.Property []
कोई भी विचार?
मैं धारणा है कि वस्तु से किसी भी कलाकारों के रूप में लंबे समय के निहित वस्तु convertable है के रूप में काम करेंगे के तहत किया गया?
ठीक है, मैंने कहा "सी # 2.0 और उसके बाद, जेनेरिक आमतौर पर सरणी कॉन्वर्सिस से बेहतर विकल्प बनाते हैं।" मुझे डर है कि मुझे इसे +1 करने के लिए अपनी आखिरी पोस्ट पर अपना +1 रद्द करना पड़ा था ... मैं आज के लिए बाहर हूं ... –
तर्कसंगत रूप से, यह लंबाई == 0 मामले के लिए थोड़ा सा डोडी देता है - I मैं खुद को एक खाली सरणी वापस भेजता हूं ... –
आरोप हटाने के लिए संपादित :) और हाँ, वापस लौटने की संभावना शायद थोड़ा सा है - लेकिन ओपी के लिए यह तय करना है :) –