कोई मार्गदर्शिका क्यों नहीं है। SsNullOrEmpty () विधि


103

इससे मुझे आश्चर्य होता है कि .NET में गाइड के पास IsNullOrEmpty()तरीका क्यों नहीं है (जहाँ खाली का मतलब सभी शून्य है)

REST API लिखते समय मुझे अपने ASP.NET MVC कोड में कई स्थानों पर इसकी आवश्यकता होती है।

या मैं कुछ याद कर रहा हूं क्योंकि इंटरनेट पर किसी ने भी उसी के लिए नहीं कहा है?


शुरू करने के लिए stackoverflow.com/questions/2344213/... लेकिन अपनी आवश्यकताओं के लिए हैGuid.Empty
V4Vendetta

जवाबों:


236

Guidएक मूल्य प्रकार है , इसलिए प्रकार का एक चर के Guidसाथ शुरू करने के लिए शून्य नहीं हो सकता है। यदि आप जानना चाहते हैं कि क्या यह खाली मार्गदर्शिका के समान है, तो आप इसका उपयोग कर सकते हैं:

if (guid == Guid.Empty)

उन मामलों के बारे में जहां एंटिटी फ्रेमवर्क गाइड चर को गाइड के रूप में परिभाषित करता है? (नल)?
गौतम जैन

6
@ गॉथ्स: तब आप उपयोग कर सकते हैं if (nullableGuid == null || nullableGuid == Guid.Empty)... या यदि आप वास्तव में चाहते हैं तो अपनी खुद की एक्सटेंशन विधि बनाएं। संभवत: यह शायद ही कभी पर्याप्त होता है कि यह ज्यादातर लोगों के लिए इसके लायक नहीं है।
जॉन स्कीट

2
@ गुड़ आप सभी प्रकार के मूल्य के लिए एक सामान्य विस्तार विधि बना सकते हैं। उदाहरण के लिए:public static bool IsNullOrDefault<T>(this T? self) where T : struct { return !self.HasValue || self.Value.Equals(default(T)); }
जेपी स्टिग नीलसन

27

एक बात के लिए, Guidअशक्त नहीं है। आप देख सकते हैं:

myGuid == default(Guid)

जो इसके बराबर है:

myGuid == Guid.Empty

2
सी # 7.1 के रूप में, आप बस उपयोग कर सकते हैंmyGuid == default
ब्रैड एम

10

यहाँ एक अशक्त गाइड के लिए एक सरल विस्तार विधि है।

/// <summary>
/// Determines if a nullable Guid (Guid?) is null or Guid.Empty
/// </summary>
public static bool IsNullOrEmpty(this Guid? guid)
{
  return (!guid.HasValue || guid.Value == Guid.Empty);
}

अपडेट करें

यदि आप वास्तव में हर जगह इसका उपयोग करना चाहते हैं, तो आप एक नियमित गाइड के लिए एक और विस्तार विधि लिख सकते हैं। यह कभी भी अशक्त नहीं हो सकता है, इसलिए कुछ लोग इसे पसंद नहीं करेंगे ... लेकिन यह उस उद्देश्य को पूरा करता है जिसकी आप तलाश कर रहे हैं और आपको यह जानने की जरूरत नहीं है कि क्या आप गाइड के साथ काम कर रहे हैं? या मार्गदर्शन (पुनः फैक्टरिंग आदि के लिए अच्छा है)।

/// <summary>
/// Determines if Guid is Guid.Empty
/// </summary>
public static bool IsNullOrEmpty(this Guid guid)
{
  return (guid == Guid.Empty);
}

अब आप someGuid.IsNullOrEmpty();सभी मामलों में उपयोग कर सकते हैं , चाहे आप गाइड या गाइड का उपयोग कर रहे हों।

जैसा कि मैंने कहा, कुछ लोग नामकरण के बारे में शिकायत करेंगे क्योंकि IsNullOrEmpty()इसका मतलब है कि मूल्य शून्य हो सकता है (जब यह नहीं हो सकता)। क्या तुम सच में करना चाहता था, तो जैसे एक्सटेंशन के लिए एक अलग नाम के साथ आते हैं IsNothing()या IsInsignificant()या जो कुछ भी :)


2

आप IsEmpty कार्यक्षमता जोड़ने के लिए दिशानिर्देश के लिए एक एक्सटेंशन विधि बना सकते हैं:

public static class GuidEx
{
    public static bool IsEmpty(this Guid guid)
    {
        return guid == Guid.Empty;
    }
}

public class MyClass
{
    public void Foo()
    {
        Guid g;
        bool b;

        b = g.IsEmpty(); // true

        g = Guid.NewGuid();

        b = g.IsEmpty; // false

        b = Guid.Empty.IsEmpty(); // true
    }
}

g = new Guid()वास्तव में एक खाली गाइड बनाएंगे। क्या आपका लिखने का इरादा था g = Guid.NewGuid()?
डेविड हेडलंड

0

जैसा कि अन्य ने बताया है, प्रश्न का आधार यह सब नहीं है। C # Guidअशक्त नहीं है। हालाँकि, Guid?है। अगर Guid?है nullया नहीं Guid.Empty, तो जाँच का एक साफ तरीका GetValueOrDefault()है Guid.Empty। उदाहरण के लिए,

Guid? id;

// some logic sets id

if (Guid.Empty.Equals(guid.GetValueOrDefault()))
{
    // Do something
}

-1

तुम्हें पता है मैं इस बयान को हर समय इस तरह देखता हूं

गाइड एक वैल्यू टाइप है, इसलिए टाइप टू गाइड का एक वैरिएबल शुरू करने के लिए अशक्त नहीं हो सकता है

लेकिन यह सिर्फ सच नहीं है।

सहमत आप प्रोग्राम गाइड को अशक्त करने के लिए सेट नहीं कर सकते हैं, लेकिन जब कुछ SQL एक UniqueIdentifier में खींचता है और इसे एक गाइड पर मैप करता है, और यदि वह मान db में शून्य है, तो मान C # में शून्य के रूप में आता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.