मुझे VB.NET में कैसे डालना चाहिए?


151

क्या ये सभी समान हैं? मुझे किन परिस्थितियों में प्रत्येक को दूसरों पर चुनना चाहिए?

  • var.ToString ()

  • CSTR (वर)

  • CType (var, String)

  • डायरेक्टकैस्ट (संस्करण, स्ट्रिंग)


संपादित करें: NotMyself से सुझाव …

  • ट्राइकास्ट (संस्करण, स्ट्रिंग)

जवाबों:


156

वे सभी थोड़ा अलग हैं, और आम तौर पर एक स्वीकार्य उपयोग है।

  • var.ToString()किसी वस्तु का स्ट्रिंग प्रतिनिधित्व आपको देने जा रहा है, भले ही वह किस प्रकार का हो। यदि varपहले से ही एक तार नहीं है, तो इसका उपयोग करें ।
  • CStr(var)VB स्ट्रिंग कास्ट ऑपरेटर है। मैं एक VB आदमी नहीं हूं, इसलिए मैं इसे टालने का सुझाव दूंगा, लेकिन यह वास्तव में कुछ भी चोट पहुंचाने वाला नहीं है। मुझे लगता है कि यह मूल रूप से के रूप में ही है CType
  • CType(var, String) किसी भी प्रदान किए गए रूपांतरण ऑपरेटरों का उपयोग करके, दिए गए प्रकार को एक स्ट्रिंग में बदल देंगे।
  • DirectCast(var, String)किसी स्ट्रिंग में ऑब्जेक्ट को अप-कास्ट करने के लिए उपयोग किया जाता है। यदि आप जानते हैं कि एक वस्तु चर, वास्तव में, एक स्ट्रिंग है, तो इसका उपयोग करें। यह (string)varC # की तरह ही है।
  • TryCast(जैसा कि @ NotMyself द्वारा उल्लेख किया गया है ) जैसा है DirectCast, लेकिन Nothingयदि कोई अपवाद फेंकने के बजाय चर को स्ट्रिंग में परिवर्तित नहीं किया जा सकता है तो यह वापस आ जाएगा । यह var as stringC # की तरह ही है। TryCastMSDN पर पेज भी एक अच्छा तुलना है।

15
CStr (var) के बजाय CType (var, String) का उपयोग करने का कोई कारण नहीं है, वे ठीक यही काम करते हैं।
जोनाथन एलन

2
@ मास्लो TryCastकेवल मूल्य प्रकारों के लिए काम करता है, क्योंकि इसे एक प्रकार का होना चाहिए Nothingजो मान के रूप में हो सकता है
bdukes

1
@ मर्तिन्हो काफी सही है। कहना चाहिए कि "केवल संदर्भ प्रकार के लिए काम करता है "
bdukes

3
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()और मैंने अपनी मुस्कान को पुनः प्राप्त किया।
बेलाश

13

Cstr() बेहतर प्रदर्शन के लिए इनलाइन संकलित है।

CType यदि किसी रूपांतरण ऑपरेटर को परिभाषित किया जाता है, तो उन प्रकारों के बीच कास्ट्स के लिए अनुमति देता है

ToString() आधार प्रकार और स्ट्रिंग के बीच एक अपवाद फेंकता है यदि रूपांतरण संभव नहीं है।

TryParse()स्ट्रिंग से बेस तक typeifसंभव है अन्यथा गलत रिटर्न देता है

DirectCastयदि टाइप इनहेरिटेंस के माध्यम से संबंधित हैं या एक सामान्य इंटरफ़ेस साझा करते हैं, तो एक अपवाद फेंक देंगे यदि कलाकार संभव नहीं है, trycastतो इस उदाहरण में वापस आ जाएगा


8

MSDN इंगित करता है कि विशिष्ट प्रकार के लिए Cxxx VB .NET में प्रदर्शन को बेहतर कर सकता है क्योंकि वे इनलाइन कोड में परिवर्तित हो जाते हैं। किसी कारण से, यह कुछ मामलों में CType के विरोध के रूप में DirectCast का भी सुझाव देता है (दस्तावेज में कहा गया है कि जब एक विरासत संबंध होता है; मेरा मानना ​​है कि इसका मतलब है कि कलाकारों की पवित्रता को संकलन समय पर जांचा जाता है और अनुकूलन लागू किया जा सकता है, जबकि सीटीएस हमेशा उपयोग करता है; वीबी रनटाइम।)

जब मैं VB .NET कोड लिख रहा हूं, तो मैं जो उपयोग कर रहा हूं वह इस बात पर निर्भर करता है कि मैं क्या कर रहा हूं। यदि यह प्रोटोटाइप कोड है जिसे मैं फेंकने जा रहा हूं, तो मैं जो कुछ भी टाइप करता हूं उसका उपयोग करता हूं। यदि यह कोड मैं गंभीर हूँ, तो मैं Cxxx कास्ट का उपयोग करने का प्रयास करता हूँ। यदि कोई मौजूद नहीं है, तो मैं DirectCast का उपयोग करता हूं अगर मुझे एक उचित विश्वास है कि एक विरासत संबंध है। यदि यह ऐसी स्थिति है जहां मुझे पता नहीं है कि कलाकारों को सफल होना चाहिए (उपयोगकर्ता इनपुट -> पूर्णांक, उदाहरण के लिए), तो मैं ट्राइकास्ट का उपयोग करता हूं ताकि उपयोगकर्ता पर अपवाद को टॉस करने की तुलना में कुछ अधिक अनुकूल हो।

एक चीज जो मैं हिला नहीं सकता, वह है मैं CStr के बजाय ToString का उपयोग करता हूं लेकिन माना जाता है कि Cstr तेज है।


8

मैं निम्नलिखित सिंटैक्स पसंद करता हूँ:

Dim number As Integer = 1
Dim str As String = String.TryCast(number)

If str IsNot Nothing Then

हाह आप बता सकते हैं मैं आमतौर पर C # में कोड लिखता हूं। 8)

मेरे द्वारा TryCast को पसंद करने का कारण यह है कि आपको कास्टिंग अपवादों के ओवरहेड के साथ गड़बड़ नहीं करना है। आपका कलाकार या तो सफल होता है या आपका वैरिएबल अशक्त होता है और आप उसी के अनुसार व्यवहार करते हैं।


2
मुझे लगता है आप ग़लत हैं। यह TryCast का उपयोग करने के लिए एक अच्छा विचार नहीं है। आपके जैसे मामले में, नंबर .oString () या CStr (नंबर) का उपयोग किया जाना चाहिए।
शिमी वेइटहैंडलर

4
@ शमी: ट्राइकास्ट का उपयोग न करने के पीछे क्या कारण है? क्या कुछ परिदृश्यों में अपवाद से बचने के लिए डायरेक्टकैस्ट बेहतर नहीं है?
डायनेक्स

3
@Dienekes और NotMyself। TryCast केवल संदर्भ प्रकारों के लिए है। यहाँ, हमारे पास एक Integer है, जो एक VALUE प्रकार है। कंपाइलर TryCast को अस्वीकार कर देगा। इसके अलावा, लक्ष्य एक स्ट्रिंग है। कुछ भी नहीं के अलावा किसी भी .Net इकाई का समर्थन करता है .ToString()। एक मान प्रकार, जैसे कि पूर्णांक, कुछ भी नहीं हो सकता है। तो इस मामले में, या तो CStr (नंबर) या नंबर। TString () सुरक्षित है। सामान्य स्थिति में (केवल मान प्रकार नहीं), CStr (जो भी) सुरक्षित है, क्योंकि यह कुछ भी नहीं संभाल सकता है - परिणाम स्ट्रिंग में कुछ भी नहीं होगा। ट्राइकास्ट बहुत उपयोगी है - बस यहां नहीं।
टूलमेकरसैट

4

-1 क्योंकि DirectCast यहाँ बहुत उपयुक्त नहीं है, सिवाय बहुत सीमित स्थिति के, जिसे आपने उल्लेख करने की जहमत नहीं उठाई। DirectCast अच्छा है जब आप जानते हैं कि आपके पास दो संबंधित संदर्भ हैं, और उनके बीच एक कुशल कास्टिंग चाहते हैं। चूँकि प्रश्न एक को प्राप्त करने के बारे में है String, इसलिए यह संभावना नहीं है कि ओपी ऐसी स्थिति पर चर्चा कर रहा है जहां डायरेक्टकैस्ट उपयुक्त है।
टूलमेकरसेव

... यदि प्रश्न का उल्लेख नहीं किया गया था Stringऔर ToString, मेरी शिकायत लागू नहीं होगी। आपको DirectCast की वकालत नहीं करनी चाहिए, जब तक कि आप विषय को सामान्य रूपांतरण से नीचे नहीं ले जाते।
टूलमेकरसेव

1

प्रमाणन परीक्षा के अनुसार आपको साधारण रूपांतरण के लिए जब भी संभव हो Convert.ToXXX () का उपयोग करना चाहिए क्योंकि यह CXX रूपांतरण से बेहतर प्रदर्शन का अनुकूलन करता है।


1
FYI करें, Microsoft पर पॉल विक के अनुसार, Cxxx ऑपरेटर Convert.Toxxx फ़ंक्शन की तुलना में कम से कम 2004 में तेज़ थे, क्योंकि Cxxx एक फ़ंक्शन को कॉल करने के बजाय सीधे IL पर संकलित करता है। हालांकि उनका औचित्य संदिग्ध लगता है, लेकिन जेआईटी-ऑप्टिमाइजेशन फंक्शन कॉल की क्षमता को देखते हुए। panopticoncentral.net/2004/05/31/the-native-net-language
ToolmakerSteve

0

एक समय पर, मुझे याद है कि CSDN लाइब्रेरी स्टेट को CStr () का उपयोग करने के लिए देखकर क्योंकि यह तेज था। मैं नहीं जानता कि क्या यह सच है।


2
DirectCast CStr की तुलना में तेज़ है, लेकिन आप इसका उपयोग केवल तब कर सकते हैं जब किसी स्ट्रिंग ऑब्जेक्ट को एक स्ट्रिंग चर में डाला जाए। यदि आप किसी अन्य ऑब्जेक्ट को स्ट्रिंग में बदलने का प्रयास करते हैं तो यह विफल हो जाएगा।
जोनाथन एलन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.