কেন সেখানে গাইড নেই? আইসনুলআরএম্পটি () পদ্ধতি নেই


103

এটি আমাকে বিস্মিত করে রাখে কেন। NET তে কোনও IsNullOrEmpty()পদ্ধতি নেই ( নেট খালি মানে সমস্ত শূন্য)

REST এপিআই লেখার সময় আমার এএসপি.নেট এমভিসি কোডে বেশ কয়েকটি স্থানে এটি দরকার।

বা ইন্টারনেটে কেউই এরকম জিজ্ঞাসা না করায় আমি কি কিছু মিস করছি?


চলতে শুরু stackoverflow.com/questions/2344213/... কিন্তু আপনার প্রয়োজনের জন্য আছেGuid.Empty
V4Vendetta

উত্তর:


236

Guidএকটি মান ধরণের , সুতরাং প্রকারের একটি পরিবর্তনশীল Guidশুরুর সাথে শূন্য হতে পারে না। এটি যদি খালি গাইডের মতো হয় তবে আপনি যদি তা জানতে চান তবে আপনি কেবল এটি ব্যবহার করতে পারেন:

if (guid == Guid.Empty)

সত্তা ফ্রেমওয়ার্ক গাইডের পরিবর্তনশীলগুলিকে গাইড হিসাবে সংজ্ঞায়িত করে এমন ক্ষেত্রে কী হবে? (nullable)?
গৌতম জৈন

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

একটি জিনিস জন্য, Guidnullable হয় না। আপনি পরীক্ষা করতে পারেন:

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

ইস্পটি কার্যকারিতা যুক্ত করতে আপনি গাইডকে একটি এক্সটেনশন পদ্ধতি তৈরি করতে পারেন:

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

অন্যরা যেমন উল্লেখ করেছে, প্রশ্নের ভিত্তি এখানে সবই নেই। সি # Guidঅযোগ্য নয়। তবে, Guid?হয়। একটি চেক একটি পরিষ্কার ভাবে Guid?হয় nullবা Guid.Emptyযদি ফল চেকের মাধ্যমে হয় GetValueOrDefault()হয় Guid.Empty। যেমন,

Guid? id;

// some logic sets id

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

-1

আপনি জানেন আমি এই বিবৃতিটি সারাক্ষণ দেখতে পাই

গাইড একটি মান ধরণের, তাই গাইডের একটি পরিবর্তনশীল প্রারম্ভ থেকে শূন্য হতে পারে না

তবে এটি ঠিক সত্য নয়।

আপনি কর্মসূচীটি বাতিল করতে কোনও প্রোগ্রাম সেট করতে পারবেন না, তবে কিছু এসকিউএল যখন কোনও ইউনিকআইডেন্টিফায়ার এ টানবে এবং এটি একটি গাইডের সাথে মানচিত্র করে, এবং যদি মানটি ডিবিতে নਾਲ হয়, মানটি সি # তে নাল হিসাবে উঠে আসে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.