मैं मौजूदा कोड से यूनिवर्सल क्लास लाइब्रेरी का निर्माण कर रहा हूं, और मुझे कुछ कंपाइलर चेतावनियां मिलती हैं कि मैं इसके जीवन के लिए यह नहीं समझ सकता कि क्या करना है।मैं मार्शल.SizeOf (ऑब्जेक्ट) को मार्शल.SizeOf <T>() के साथ कैसे बदल सकता हूं?
मैं इस तरह कोड है:
void SomeMethod(Object data)
{
var size = Marshal.SizeOf(data);
...
}
कोड बनाता है, लेकिन यूनिवर्सल परियोजना (और, मुझे लगता है, .NET 4.5.1 और उच्च परियोजनाओं) मैं निम्नलिखित संकलक चेतावनी मिलती है में:
चेतावनी CS0618: 'System.Runtime.InteropServices.Marshal.SizeOf (वस्तु)' अप्रचलित है: 'sizeof (वस्तु) आगामी रिलीज़ में उपलब्ध नहीं रहेंगे। इसके बजाय, SizeOf < टी >() का उपयोग करें।
लेकिन मैं सामान्य पैरामीटर कम विधि Marshal.SizeOf<T>()
का उपयोग करके उपरोक्त मामले में Marshal.SizeOf(Object)
के लिए एक स्थानापन्न कैसे बना सकता हूँ? सैद्धांतिक रूप से, मुझे नहीं पता कि data
किस प्रकार का है?
ऐसा इसलिए है क्योंकि Marshal.SizeOf(Object)
का उपयोग करना बुरा अभ्यास माना जाता है कि इसे Obsolete
का श्रेय दिया गया है? और ले-होम संदेश वास्तव में "कोड को पूरी तरह से दोहराएं" होना चाहिए?
यह निश्चित रूप से 4.5.1 में अप्रचलित नहीं है। मैं अनुमान लगा रहा हूं कि इसे विशेष रूप से सार्वभौमिक संदर्भ असेंबली में अप्रचलित कर दिया गया था क्योंकि यह .NET मूल के आगे के समय संकलक के लिए गर्दन में दर्द है। यह स्पष्ट नहीं है कि आप केवल कुछ विधि सामान्य क्यों नहीं बना सकते। यदि आप नहीं कर सकते हैं तो .NET मूल टूलचैन भी परेशानी के लिए उत्तरदायी है। –
मैंने अपना जवाब हटा दिया है। कृपया एमएसडीएन पर [SizeOf (टी) देखें (http://msdn.microsoft.com/en-us/library/vstudio/dn261467 (v = vs.110) .aspx)। इसमें '' और एक पैरामीटर भी लगता है। आप वहां अपनी ऑब्जेक्ट पास कर सकते हैं, और इसे ठीक से मापा जाएगा। मुझे पूरा यकीन है कि आपको सफलतापूर्वक 'Marhal.SizeOf
आपकी सभी मदद के लिए धन्यवाद, @quetzalcoatl और NemanjaBoric। 'SizeOf' अधिभार को याद करने के लिए मुझे मूर्खतापूर्ण। मैं इसे आज़मा दूंगा और देख सकता हूं कि यह मेरी आवश्यकताओं के अनुरूप कितना अच्छा है। –