2009-11-13 12 views
12

क्या वापसी के कुछ तरीके हैं यदि यह int को स्ट्रिंग को पार्स नहीं कर सकता है? साथint.TryParse = शून्य अगर संख्यात्मक नहीं है?

:

public .... , string? categoryID) 
{ 
int.TryParse(categoryID, out categoryID); 

हो रही "करने के लिए 'बाहर पूर्णांक' से 'बाहर स्ट्रिंग' परिवर्तित नहीं कर सकते कि क्या करना है

संपादित करें:

अब क्योंकि प्रासंगिक एएसपीनेट बाधाएं समस्या को हल करने का तरीका

/एम

+2

क्यों आप इसे किसी पूर्णांक पर पार्स जब आप एक स्ट्रिंग में संग्रहीत करना चाहते हैं ?? –

+2

वैसे, स्ट्रिंग एक संदर्भ प्रकार है, इसलिए आपको इसे कमजोर नहीं करना चाहिए। (यह वैसे भी संकलित करता है?) –

+0

मैं asp.net MVC के लिए यह उपयोग करती हैं इसलिए CategoryID यूआरएल से मैप किया गया है, तो मैं त्रुटि मिलती है अगर मैं यूआरएल –

उत्तर

24

सबसे पहले, तुम क्यों एक पूर्णांक के लिए एक स्ट्रिंग को पार्स करने और परिणाम एक स्ट्रिंग में वापस छड़ी करने की कोशिश कर रहे हैं?

विधि हस्ताक्षर

bool int.TryParse(string, out int) 

तो आप दूसरा तर्क के रूप में प्रकार int के एक चर देने के लिए है। इसका अर्थ यह भी है कि यदि पार्सिंग विफल हो जाती है तो आपको null नहीं मिलेगा, इसके बजाय विधि false वापस आ जाएगी। लेकिन आप आसानी से इसे एकसाथ टुकड़ा कर सकते हैं:

int? TryParse2(string s) { 
    int i; 
    if (!int.TryParse(s, out i)) { 
     return null; 
    } else { 
     return i; 
    } 
} 
+0

ईप, धन्यवाद, गैरी। इसे संकलित किए बिना कोड लिखना उन त्रुटियों को आमंत्रित करता है जैसे :-) – Joey

+1

मुझे लगता है कि यह एक अच्छी विस्तार विधि – cost

0

** यह उत्तर बहुत कम किया गया था ** हालांकि यह एक संभावित समाधान है - यह एक खराब प्रदर्शन प्रदर्शन है, और शायद एक अच्छी प्रोग्रामिंग पसंद नहीं है।

के रूप में मुझे लगता है कि कई प्रोग्रामर इस बारे में पता नहीं हो सकता है, इसलिए यहाँ एक उदाहरण है कि कैसे काम करने के लिए नहीं है मैं, नहीं हटेगा:

उपयोग कोशिश करते हैं और पकड़ने

try 
{ 
res = Int32.Parse(strVAR) 
} 
catch(exception ex) 
{ 
return null; 
} 
+1

'TryParse' का उपयोग करने के लिए बेहतर। – jason

+0

खैर, यह अभी भी एक विकल्प है .... – Dani

+1

के बाद से 2.0 सी # बाहर आया, TryParse लगभग हमेशा पकड़ने अपवाद कर से बेहतर है। – Bomlin

0

इंट है एक मूल्य प्रकार जिसका अर्थ है कि शून्य शून्य के रूप में ऐसी कोई चीज़ नहीं है। तो नहीं, TryParse कभी भी पैरामीटर को बदल नहीं देगा ताकि यह शून्य हो।

लेकिन आपकी समस्या यह है कि आप एक पूर्णांक की अपेक्षा करते समय TryParse के आउट पैरामीटर को स्ट्रिंग पास कर रहे हैं।

आप कुछ इस तरह की जरूरत है ...

Int categoryID = 0; 
string strCategoryID = "somestringmaybeitsaninteger"; 

int.TryParse(strCategoryID, out categoryID); 
+0

एक निरर्थक int है: int? – Dani

+0

दानी: 'TryParse' हालांकि, 'int' देता है, न कि' Nullable '। – Joey

+0

int? वास्तव में एक पूर्णांक प्रकार नहीं है ... यह System.Nullable के लिए लघुरूप है। – jerhinesmith

0

TryParse अवास्तविक लौटाते हैं, तो स्ट्रिंग पार्स नहीं किया जा सकता है। आप या तो पार्स किए गए मान या शून्य को वापस करने के लिए इस तथ्य का उपयोग कर सकते हैं। वैसे भी मुझे लगता है कि है कि आप अपने विधि से int? वापस जाने के लिए इच्छुक है, तो यह कुछ इस तरह होगा:

int? value; 
int dummy; 
if(Int32.TryParse(categoryID, out dummy)) { 
    value = dummy; 
} 
else { 
    value = null; 
} 
return value; 
14

यहाँ Int32.TryParse का एक उचित फायदा नहीं है इस?

public int? Parse(string categoryID) 
{ 
    int value; 
    if (int.TryParse(categoryID, out value)) 
    { 
    return value; 
    } 
    else 
    { 
    return null; 
    } 
} 
+4

या: मूल्य = int.TryParse (categoryID, डमी बाहर)? डमी: शून्य; –

+1

हां, बिल्कुल लेकिन यह एक neophyte के लिए अधिक अपारदर्शी है। – jason

+0

@ डैन: संकलित नहीं होगा ;-) लेकिन हाँ, मैं उस समाधान को पसंद करता हूं (प्लस एक कास्ट, इसे संकलित करने के लिए)। –

0

आप की तरह कुछ करना चाहते हैं:

public int? ParseInt(string categoryID) 
{ 
    int theIntValue; 
    bool parseOk = int.TryParse(categoryID, out theIntValue); 
    if(parseOk) { 
     return theIntValue; 
    } else { 
     return null; 
    } 
} 
9

इस बारे में कैसे?

public int? ParseToNull(string categoryId) 
{ 
    int id; 
    return int.TryParse(categoryId, out id) ? (int?)id : null; 
} 
+0

करेगा इस समाधान को एक विस्तार विधि में बदलने से लाभ हो सकता है। –

+0

यह मेरे ऐप में पहले से ही एक विस्तार विधि है लेकिन मुझे नहीं पता था कि मोल्गान इसके लिए क्या चाहता था इसलिए मैंने इसे एक विधि के रूप में रखा। – DigitalNomad

+0

आपको वहां आईडी पर कलाकारों की आवश्यकता नहीं है। एक int या null एक मान्य Nullable है :)। – Khanzor

2

सरल ...

Int N = Int.TryParse(somestring, N) ? N : 0; 

यह काम करता है क्योंकि यह सही करने के लिए छोड़ मूल्यांकित है। नल इतना आसान नहीं है।

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