अशक्त के लिए जाँच करने का सबसे छोटा तरीका और यदि नहीं तो एक और मूल्य प्रदान करें


86

मैं varcharएक DB से मूल्यों को खींच रहा हूं और सेट करना चाहता stringहूं कि मैं उन्हें "" के रूप में निर्दिष्ट कर रहा हूं यदि वे हैं null। मैं वर्तमान में इसे इस तरह कर रहा हूं:

if (string.IsNullOrEmpty(planRec.approved_by) == true)
  this.approved_by = "";
else
  this.approved_by = planRec.approved_by.toString();

ऐसा लगता है कि एक लाइन में ऐसा करने का एक तरीका होना चाहिए जैसे कुछ:

this.approved_by = "" || planRec.approved_by.toString();

हालाँकि मुझे ऐसा करने का एक इष्टतम तरीका नहीं मिल रहा है। क्या कोई बेहतर तरीका है या मेरे पास ऐसा करने का सबसे अच्छा तरीका है?


5
== सच यहाँ बहुत ही शानदार है ...
cjk

जवाबों:


104

इसे इस्तेमाल करे:

this.approved_by = IsNullOrEmpty(planRec.approved_by) ? "" : planRec.approved_by.toString();

आप अशक्त-संचालक ऑपरेटर का उपयोग भी कर सकते हैं जैसा कि अन्य ने कहा है - क्योंकि किसी ने भी एक उदाहरण नहीं दिया है जो आपके कोड के साथ काम करता है:

this.approved_by = planRec.approved_by ?? planRec.approved_by.toString();

लेकिन यह उदाहरण केवल एक संभावित मूल्य के लिए काम करता है क्योंकि यह this.approved_byउन संभावित मूल्यों में से एक है जो आप इसे सेट करना चाहते हैं। अन्य सभी मामलों के लिए आपको सशर्त ऑपरेटर का उपयोग करने की आवश्यकता होगी जैसा कि मैंने अपने पहले उदाहरण में दिखाया था।


8
क्या यह अशक्त ज़ालिम संचालक किसी भी तरह की अशांति नहीं फेंक सकता है? जिस तरह से मैं इस कोड को देखता हूं वह निम्न कार्य करता है if (planRec.approved_by == null) { this.approved_by = planRec.approved_by.toString(); //<= nullref } else { this.approved_by = planRec.approved_by;}:। अगर मैं गलत हूं तो कृपया त्रुटि बताएं।
डेस्टिनेटर

10
@Destrictor सही है, कोड टूट गया है। यहां एक और मज़ेदार ऑपरेटर का उपयोग करके एक फिक्स किया गया है: this.approved_by = planRec.approved_by?.toString() ?? ""; <- यह अशक्त-सशर्त ऑपरेटर है, और मुझे नहीं लगता कि यह आसपास था जब यह सवाल पहली बार पूछा गया था और जवाब दिया गया था। उम्मीद है कि ओपी इसे देखता है, इसलिए वह अपने 7 साल पुराने कोड को रिफ्लेक्टर कर सकता है, दो नौकरियों से :)।
पैट्रिक

34

सम्मिलित ऑपरेटर (??) आप क्या चाहते हैं, मेरा मानना है कि है।


4
हां ... लेकिन केवल इसलिए कि डिफ़ॉल्ट "" है।
पॉल अलेक्जेंडर

उम, कैसे? अशक्त को बदलने के लिए कोई भी अभिव्यक्ति का उपयोग कर सकता है ..
TaW

30

आप C # मोटे ऑपरेटर की तलाश में हैं: ?? यह ऑपरेटर बाएँ और दाएँ तर्क लेता है। यदि ऑपरेटर का बायाँ हाथ पक्ष शून्य है या बिना किसी मूल्य के अशक्त है, तो यह सही तर्क लौटाएगा। अन्यथा यह बाईं ओर वापस आ जाएगी।

var x = somePossiblyNullValue ?? valueIfNull;

यह उत्तर प्रश्न से सभी मामलों को कवर नहीं करता है (केवल आंशिक रूप से)। ध्यान दें, कि "string.IsNullOrEmpty" है। इसलिए खाली मामला यहां संभाला नहीं जाता है।
ब्रोनक

28

मेरा अनुमान है कि आप सबसे अच्छे हैं

this.approved_by = IsNullOrEmpty(planRec.approved_by) ? string.Empty
                                                      : planRec.approved_by.ToString();

बेशक, जब से आप इस तथ्य पर इशारा कर रहे हैं कि approved_byयह एक object(जो बराबर नहीं हो सकता ""), इसे फिर से लिखा जाएगा

this.approved_by = (planRec.approved_by ?? string.Empty).ToString();

20

C # 6 के साथ उस मामले के लिए एक छोटा तरीका है जहां planRec.approved_by एक स्ट्रिंग नहीं है:

this.approved_by = planRec.approved_by?.ToString() ?? "";

15

C # कोलेसस ऑपरेटर का उपयोग करें: ??

// if Value is not null, newValue = Value else if Value is null newValue is YournullValue
var newValue = Value ?? YourNullReplacement;

15

C # 8.0 से शुरू होकर, आप फॉर्म के कोड को बदलने के लिए ?? = ऑपरेटर का उपयोग कर सकते हैं

if (variable is null)
{
    variable = expression;
}

निम्नलिखित कोड के साथ:

variable ??= expression;

अधिक जानकारी यहाँ है



2

वास्तविक चर नाम को दोहराए बिना (और यदि शून्य शून्य है तो कुछ भी बताए बिना) एक गैर-खाली चर निर्दिष्ट करने के लिए, आप एक Actionपैरामीटर के साथ थोड़ा सहायक विधि का उपयोग कर सकते हैं :

public static void CallIfNonEmpty(string value, Action<string> action)
{
    if (!string.IsNullOrEmpty(value))
        action(value);
}

और फिर बस इसका उपयोग करें:

CallIfNonEmpty(this.approved_by, (s) => planRec.approved_by = s);

1

आप इसे अपनी क्वेरी में भी कर सकते हैं, उदाहरण के लिए sql सर्वर, Google ISNULLऔर CASEअंतर्निहित फ़ंक्शन।


-4

मैं extention विधि SelfChk का उपयोग करता हूं

static class MyExt {
//Self Check 
 public static void SC(this string you,ref string me)
    {
        me = me ?? you;
    }
}

फिर जैसे का उपयोग करें

string a = null;
"A".SC(ref a);

मुझे लगता है कि आपका मतलब है लेकिन पढ़ना और समझना आसान नहीं है, क्या ऐसा है?
अली हुमायूँ

3
यूपीएस! आप बिलकुल सही हैं: बहुत छोटा, लेकिन पढ़ने और समझने में आसान नहीं है (कम से कम यदि आप इस अंकन के अभ्यस्त नहीं हैं)
जैक मिलर

अच्छी तरह से उस मामले में एक किताब पढ़ने की कोशिश करो। आपको यह वास्तव में विस्तृत और समझने में आसान लगेगा: पी
अली हुमायूँ
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.