क्या ये सभी समान हैं? मुझे किन परिस्थितियों में प्रत्येक को दूसरों पर चुनना चाहिए?
var.ToString ()
CSTR (वर)
CType (var, String)
डायरेक्टकैस्ट (संस्करण, स्ट्रिंग)
संपादित करें: NotMyself से सुझाव …
- ट्राइकास्ट (संस्करण, स्ट्रिंग)
क्या ये सभी समान हैं? मुझे किन परिस्थितियों में प्रत्येक को दूसरों पर चुनना चाहिए?
var.ToString ()
CSTR (वर)
CType (var, String)
डायरेक्टकैस्ट (संस्करण, स्ट्रिंग)
संपादित करें: NotMyself से सुझाव …
जवाबों:
वे सभी थोड़ा अलग हैं, और आम तौर पर एक स्वीकार्य उपयोग है।
var.
ToString
()
किसी वस्तु का स्ट्रिंग प्रतिनिधित्व आपको देने जा रहा है, भले ही वह किस प्रकार का हो। यदि var
पहले से ही एक तार नहीं है, तो इसका उपयोग करें ।CStr
(var)
VB स्ट्रिंग कास्ट ऑपरेटर है। मैं एक VB आदमी नहीं हूं, इसलिए मैं इसे टालने का सुझाव दूंगा, लेकिन यह वास्तव में कुछ भी चोट पहुंचाने वाला नहीं है। मुझे लगता है कि यह मूल रूप से के रूप में ही है CType
।CType
(var, String)
किसी भी प्रदान किए गए रूपांतरण ऑपरेटरों का उपयोग करके, दिए गए प्रकार को एक स्ट्रिंग में बदल देंगे।DirectCast
(var, String)
किसी स्ट्रिंग में ऑब्जेक्ट को अप-कास्ट करने के लिए उपयोग किया जाता है। यदि आप जानते हैं कि एक वस्तु चर, वास्तव में, एक स्ट्रिंग है, तो इसका उपयोग करें। यह (string)var
C # की तरह ही है।TryCast
(जैसा कि @ NotMyself द्वारा उल्लेख किया गया है ) जैसा है DirectCast
, लेकिन Nothing
यदि कोई अपवाद फेंकने के बजाय चर को स्ट्रिंग में परिवर्तित नहीं किया जा सकता है तो यह वापस आ जाएगा । यह var as string
C # की तरह ही है। TryCast
MSDN पर पेज भी एक अच्छा तुलना है।TryCast
केवल मूल्य प्रकारों के लिए काम करता है, क्योंकि इसे एक प्रकार का होना चाहिए Nothing
जो मान के रूप में हो सकता है
CStr(var)
चोक हो जाएगा और यदि DBNull.Value है, तो एक अपवाद बढ़ाएगा, लेकिन वैकल्पिक Convert.ToString(var)
एक खाली स्ट्रिंग लौटाएगा।
Dim myList AS ArrayList=new ArrayList
जब आप लिखते हैं तो (From e In myList select CType(e.Name,String)).ToArray()
यह काम नहीं करता है। मैं लिखने आया ... select CType(e.Name.ToString,String)).ToArray()
और मैंने अपनी मुस्कान को पुनः प्राप्त किया।
Cstr()
बेहतर प्रदर्शन के लिए इनलाइन संकलित है।
CType
यदि किसी रूपांतरण ऑपरेटर को परिभाषित किया जाता है, तो उन प्रकारों के बीच कास्ट्स के लिए अनुमति देता है
ToString()
आधार प्रकार और स्ट्रिंग के बीच एक अपवाद फेंकता है यदि रूपांतरण संभव नहीं है।
TryParse()
स्ट्रिंग से बेस तक typeif
संभव है अन्यथा गलत रिटर्न देता है
DirectCast
यदि टाइप इनहेरिटेंस के माध्यम से संबंधित हैं या एक सामान्य इंटरफ़ेस साझा करते हैं, तो एक अपवाद फेंक देंगे यदि कलाकार संभव नहीं है, trycast
तो इस उदाहरण में वापस आ जाएगा
MSDN इंगित करता है कि विशिष्ट प्रकार के लिए Cxxx VB .NET में प्रदर्शन को बेहतर कर सकता है क्योंकि वे इनलाइन कोड में परिवर्तित हो जाते हैं। किसी कारण से, यह कुछ मामलों में CType के विरोध के रूप में DirectCast का भी सुझाव देता है (दस्तावेज में कहा गया है कि जब एक विरासत संबंध होता है; मेरा मानना है कि इसका मतलब है कि कलाकारों की पवित्रता को संकलन समय पर जांचा जाता है और अनुकूलन लागू किया जा सकता है, जबकि सीटीएस हमेशा उपयोग करता है; वीबी रनटाइम।)
जब मैं VB .NET कोड लिख रहा हूं, तो मैं जो उपयोग कर रहा हूं वह इस बात पर निर्भर करता है कि मैं क्या कर रहा हूं। यदि यह प्रोटोटाइप कोड है जिसे मैं फेंकने जा रहा हूं, तो मैं जो कुछ भी टाइप करता हूं उसका उपयोग करता हूं। यदि यह कोड मैं गंभीर हूँ, तो मैं Cxxx कास्ट का उपयोग करने का प्रयास करता हूँ। यदि कोई मौजूद नहीं है, तो मैं DirectCast का उपयोग करता हूं अगर मुझे एक उचित विश्वास है कि एक विरासत संबंध है। यदि यह ऐसी स्थिति है जहां मुझे पता नहीं है कि कलाकारों को सफल होना चाहिए (उपयोगकर्ता इनपुट -> पूर्णांक, उदाहरण के लिए), तो मैं ट्राइकास्ट का उपयोग करता हूं ताकि उपयोगकर्ता पर अपवाद को टॉस करने की तुलना में कुछ अधिक अनुकूल हो।
एक चीज जो मैं हिला नहीं सकता, वह है मैं CStr के बजाय ToString का उपयोग करता हूं लेकिन माना जाता है कि Cstr तेज है।
मैं निम्नलिखित सिंटैक्स पसंद करता हूँ:
Dim number As Integer = 1
Dim str As String = String.TryCast(number)
If str IsNot Nothing Then
हाह आप बता सकते हैं मैं आमतौर पर C # में कोड लिखता हूं। 8)
मेरे द्वारा TryCast को पसंद करने का कारण यह है कि आपको कास्टिंग अपवादों के ओवरहेड के साथ गड़बड़ नहीं करना है। आपका कलाकार या तो सफल होता है या आपका वैरिएबल अशक्त होता है और आप उसी के अनुसार व्यवहार करते हैं।
.ToString()
। एक मान प्रकार, जैसे कि पूर्णांक, कुछ भी नहीं हो सकता है। तो इस मामले में, या तो CStr (नंबर) या नंबर। TString () सुरक्षित है। सामान्य स्थिति में (केवल मान प्रकार नहीं), CStr (जो भी) सुरक्षित है, क्योंकि यह कुछ भी नहीं संभाल सकता है - परिणाम स्ट्रिंग में कुछ भी नहीं होगा। ट्राइकास्ट बहुत उपयोगी है - बस यहां नहीं।
स्टैक ओवरफ्लो प्रश्न "वीबी.नेट की छिपी विशेषताएं" में उपयोगकर्ता कोनराड रूडोल्फ डायरेक्टकास्ट () के लिए वकालत करते हैं ।
String
, इसलिए यह संभावना नहीं है कि ओपी ऐसी स्थिति पर चर्चा कर रहा है जहां डायरेक्टकैस्ट उपयुक्त है।
String
और ToString
, मेरी शिकायत लागू नहीं होगी। आपको DirectCast की वकालत नहीं करनी चाहिए, जब तक कि आप विषय को सामान्य रूपांतरण से नीचे नहीं ले जाते।
प्रमाणन परीक्षा के अनुसार आपको साधारण रूपांतरण के लिए जब भी संभव हो Convert.ToXXX () का उपयोग करना चाहिए क्योंकि यह CXX रूपांतरण से बेहतर प्रदर्शन का अनुकूलन करता है।
एक समय पर, मुझे याद है कि CSDN लाइब्रेरी स्टेट को CStr () का उपयोग करने के लिए देखकर क्योंकि यह तेज था। मैं नहीं जानता कि क्या यह सच है।