2010-02-11 25 views
5

मैं कक्षाओं और structs में मूल्यों को लोड करते समय Nullable<T> प्रकारों का उपयोग करता हूं, जब मुझे उन्हें अनुपलब्ध करने की आवश्यकता होती है, जैसे डेटाबेस से एक शून्य मूल्य (नीचे उदाहरण के रूप में) लोड करना।कास्टिंग (int?) शून्य बनाम नया int?() - कौन सा बेहतर है?

कोड के इस स्निपेट पर विचार करें:

public class InfoObject 
{ 
    public int? UserID { get; set; } 
} 

// Load the ID into an SqlInt32 
SqlInt32 userID = reader.GetSqlInt32(reader.GetOrdinal("intUserID")); 

जब मैं एक नल संपत्ति में कोई मान लोड करने के लिए की जरूरत है, कभी कभी मैं यह कर:

infoObject.UserID = userID.IsNull ? (int?)null : userID.Value; 

कभी कभी मैं इस बजाय कार्य करें:

infoObject.UserID = userID.IsNull ? new int?() : userID.Value; 

हालांकि वे एक ही परिणाम प्राप्त करते हैं, लेकिन मैं देखना चाहता हूं कि क्या कोई जानता है कि 012 के बीच उपयोग करना बेहतर है प्रदर्शन, छोटे आईएल कोड, सर्वोत्तम प्रथाओं आदि के संबंध मेंऔर new int?()?

आम तौर पर मैं ऊपर कोड की new int?() संस्करण के पक्ष में किया गया है, लेकिन मैं यकीन नहीं है कि कास्टिंग (int?)nullnew int?() से हल करने के लिए संकलक तेज है नहीं कर रहा हूँ।

चीयर्स!

उत्तर

8

वे एक ही आईएल उत्पन्न करेंगे। जो भी आपको पढ़ने में आसान लगता है उसका प्रयोग करें।

जब आप "संकलक को हल करने के लिए तेज़" होने के बारे में बात करते हैं, तो क्या आप अपने बार माइक्रो-ऑप्टिमाइज़ करने के बारे में बात कर रहे हैं? मुझे नहीं पता कि वहां तेजी से क्या होगा, लेकिन मुझे संदेह है कि यह कोड के किसी भी महत्वपूर्ण निकाय के लिए एक विश्वसनीय-मापनीय अंतर बनाएगा।

व्यक्तिगत रूप से मैं null का उपयोग करता हूं जब भी मैं बिना अस्पष्टता के ऐसा कर सकता हूं; मुझे लगता है कि मैं अभी भी आमतौर पर new पर कॉल करने के लिए कलाकार पसंद करता हूं, लेकिन इससे कोई वास्तविक अंतर नहीं होता है।

+0

मैं आपसे सहमत हूं। '(int?) null'' int int '()' से कहीं बेहतर दिखता है, विशेष रूप से जब मेरे उदाहरण शो जैसे ऑनलाइन सशर्त बयान के भीतर उपयोग किया जाता है। आपके प्रश्न के बारे में: आपने जवाब दिया जब आपने कहा कि आईएल एक जैसा है। निर्माण समय वर्तमान में कोई मुद्दा नहीं है (जब तक कि मैं टीएफएसबिल्ड का उपयोग नहीं करता, लेकिन यह एक पूरी कहानी है) इसलिए आईएल मैचों के इतने लंबे समय तक, मैं खुश हूं :) – Codesleuth

+0

मेरा पसंदीदा (कास्ट संस्करण के साथ बहुत करीब दूसरे के रूप में) 'डिफ़ॉल्ट (int?)' है। – sblom

संबंधित मुद्दे