স্ট্রিং.আইএসনুলআরএম্পটি (স্ট্রিং) বনাম স্ট্রিং.আইএসনুলআরওহাইটস্পেস (স্ট্রিং)


207

.NET 4.0 এবং এর উপরে থাকা string.IsNullOrEmpty(string)অবস্থায় কোনও স্ট্রিং চেক করার সময় কী খারাপ ব্যবহার হিসাবে বিবেচিত হয় string.IsNullOrWhiteSpace(string)?

উত্তর:


328

সেরা অনুশীলন সবচেয়ে উপযুক্ত এক নির্বাচন করা হয়।

। নেট ফ্রেমওয়ার্ক 4.0 বিটা 2 তে স্ট্রিংগুলির জন্য একটি নতুন ইসনুলআরওয়াইটসাইট () পদ্ধতি রয়েছে যা ইসনুলআরএম্পটি () পদ্ধতিটিকে খালি স্ট্রিং ছাড়াও অন্যান্য সাদা স্থান অন্তর্ভুক্ত করতে সাধারণীকরণ করে।

"সাদা স্থান" শব্দটিতে স্ক্রিনে দৃশ্যমান নয় এমন সমস্ত অক্ষর অন্তর্ভুক্ত রয়েছে। উদাহরণস্বরূপ, স্পেস, লাইন ব্রেক, ট্যাব এবং খালি স্ট্রিং হ'ল স্পেস অক্ষর *

তথ্যসূত্র: এখানে

পারফরম্যান্সের জন্য, ইসনুলআরওহাইটস্পেস আদর্শ না হলেও ভাল। পদ্ধতি কলগুলির ফলে একটি ক্ষুদ্র পারফরম্যান্স জরিমানা হবে। আরও, ইসওয়াইটস্পেস পদ্ধতিতে নিজেই কিছু ইন্ডিয়ারেশন রয়েছে যা আপনি ইউনিকোড ডেটা ব্যবহার না করে থাকলে সরিয়ে ফেলা যায়। সর্বদা হিসাবে, অকালীন অপটিমাইজেশন খারাপ হতে পারে, তবে এটি মজাদারও।

তথ্যসূত্র: এখানে

উত্স কোডটি পরীক্ষা করুন (রেফারেন্স উত্স। নেট ফ্রেমওয়ার্ক 4.6.2)

IsNullorEmpty

[Pure]
public static bool IsNullOrEmpty(String value) {
    return (value == null || value.Length == 0);
}

IsNullOrWhiteSpace

[Pure]
public static bool IsNullOrWhiteSpace(String value) {
    if (value == null) return true;

    for(int i = 0; i < value.Length; i++) {
        if(!Char.IsWhiteSpace(value[i])) return false;
    }

    return true;
}

উদাহরণ

string nullString = null;
string emptyString = "";
string whitespaceString = "    ";
string nonEmptyString = "abc123";

bool result;

result = String.IsNullOrEmpty(nullString);            // true
result = String.IsNullOrEmpty(emptyString);           // true
result = String.IsNullOrEmpty(whitespaceString);      // false
result = String.IsNullOrEmpty(nonEmptyString);        // false

result = String.IsNullOrWhiteSpace(nullString);       // true
result = String.IsNullOrWhiteSpace(emptyString);      // true
result = String.IsNullOrWhiteSpace(whitespaceString); // true
result = String.IsNullOrWhiteSpace(nonEmptyString);   // false

এখন আমি বিভ্রান্ত করছি: এখান থেকে "IsNullOrWhiteSpace একটি সুবিধার পদ্ধতি যা ব্যতীত এটি উচ্চতর কর্মক্ষমতা উপলব্ধ করা হয় নিম্নলিখিত কোড অনুরূপ হয়": msdn.microsoft.com/en-us/library/...
robasta

@rob প্রশ্নের মধ্যে থাকা কোডটি হল return String.IsNullOrEmpty(value) || value.Trim().Length == 0;যা নতুন স্ট্রিং বরাদ্দ এবং দুটি পৃথক চেক জড়িত। সম্ভবত সম্ভবত ইসনুলআরওয়েটস্পেসের অভ্যন্তরে স্ট্রিংয়ের প্রতিটি চরটি হোয়াইটস্পেস, তাই উচ্চতর পারফরম্যান্স যাচাই করে কোনও বরাদ্দ ছাড়াই সিঙ্গল পাসের মাধ্যমে এটি করা হয়। আসলে আপনি কি বিভ্রান্ত?
ইভান ডানিলভ

10
ধন্যবাদ! আমি কখনই জানতাম না যে IsNullOrWhitespace()খালি স্ট্রিংয়ের সাথে মেলে কিনা । মূলত IsNullOrEmpty()একটি উপসেটের সাথে মেলে IsNullOrWhitespace()
gligoran

155

অনুশীলনে পার্থক্য:

string testString = "";
Console.WriteLine(string.Format("IsNullOrEmpty : {0}", string.IsNullOrEmpty(testString)));
Console.WriteLine(string.Format("IsNullOrWhiteSpace : {0}", string.IsNullOrWhiteSpace(testString)));
Console.ReadKey();

Result :
IsNullOrEmpty : True
IsNullOrWhiteSpace : True

**************************************************************
string testString = " MDS   ";

IsNullOrEmpty : False
IsNullOrWhiteSpace : False

**************************************************************
string testString = "   ";

IsNullOrEmpty : False
IsNullOrWhiteSpace : True

**************************************************************
string testString = string.Empty;

IsNullOrEmpty : True
IsNullOrWhiteSpace : True

**************************************************************
string testString = null;

IsNullOrEmpty : True
IsNullOrWhiteSpace : True

4
এটি আমার মতে গ্রহণযোগ্য উত্তর হওয়া উচিত। পুনর্নির্দেশের পরিবর্তে প্রকৃত উদাহরণগুলি দেখিয়ে স্বীকৃত উত্তরের চেয়ে বেশি জ্ঞান অর্জন করে।
agগলই 22

37

তারা বিভিন্ন ফাংশন। আপনার পরিস্থিতি যা আপনার প্রয়োজন তা স্থির করে নেওয়া উচিত।

আমি এগুলির কোনওটি ব্যবহারকে একটি খারাপ অভ্যাস হিসাবে বিবেচনা করি না। বেশিরভাগ সময়ই IsNullOrEmpty()যথেষ্ট। তবে আপনার পছন্দ আছে :)


2
উদাহরণস্বরূপ, একটি নিবন্ধীকরণ পৃষ্ঠায় একটি ব্যবহারকারীর নাম ক্ষেত্রটি যাচাইকরণের জন্য ইসনুলআরএমটিপি ব্যবহার করবে যাতে ব্যবহারকারীর নাম হিসাবে স্থান থাকতে পারে না।
ক্রিস

14
@ আরএফভিজিহন: আপনি যদি পরীক্ষা করতে চান যে ব্যবহারকারীর নাম কোথাও ফাঁকা নেই - আপনার ব্যবহার করা উচিত Contains। আপনি যদি নিশ্চিত করতে চান যে কেবল ব্যবহারকারীর নামটিতে কেবল ফাঁকা স্থান থাকতে পারে না - IsNullOrWhiteSpaceঠিক আছে। IsNullOrEmptyশুধুমাত্র নিশ্চিত করে যে কোনওরকম ব্যবহারকারীর নাম প্রবেশ করানো হয়েছিল।
ইভান ড্যানিলভ

1
প্রকৃতপক্ষে. আমি আপনার উত্তরে যুক্ত করার জন্য একটি দৃ concrete় উদাহরণ দেওয়ার চেষ্টা করছিলাম। বাস্তব বিশ্বে, কোনও ব্যবহারকারীর নাম বৈধকরণের নিয়মটি খালি বা শ্বেত স্পেস কিনা তা যাচাই করার চেয়ে সাধারণত কিছুটা যুক্তিযুক্ত থাকে।
ক্রিস

28

উভয় পদ্ধতির আসল বাস্তবায়ন এখানেই রয়েছে (ডটপিক ব্যবহার করে সংক্রামিত)

[TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")]
    public static bool IsNullOrEmpty(string value)
    {
      if (value != null)
        return value.Length == 0;
      else
        return true;
    }

    /// <summary>
    /// Indicates whether a specified string is null, empty, or consists only of white-space characters.
    /// </summary>
    /// 
    /// <returns>
    /// true if the <paramref name="value"/> parameter is null or <see cref="F:System.String.Empty"/>, or if <paramref name="value"/> consists exclusively of white-space characters.
    /// </returns>
    /// <param name="value">The string to test.</param>
    public static bool IsNullOrWhiteSpace(string value)
    {
      if (value == null)
        return true;
      for (int index = 0; index < value.Length; ++index)
      {
        if (!char.IsWhiteSpace(value[index]))
          return false;
      }
      return true;
    }

4
সুতরাং এর অর্থটিও IsNullOrWhiteSpaceসত্য string.Empty! এটি একটি বোনাস :)
Ε Г И І И

4
হ্যাঁ, নিরাপদটি ইসনুলআরওহাইটস্পেস ব্যবহার করবে (স্ট্রিং.এম্পটি, নাল এবং হোয়াইটস্পেসের জন্য সত্য)
ডেকদেব

7

এটি বলে যে এটির IsNullOrEmpty()মধ্যে সাদা ব্যবধান অন্তর্ভুক্ত নয় IsNullOrWhiteSpace()!

IsNullOrEmpty()যদি স্ট্রিংটি হয়:
-শক্তি
-শক্তি

IsNullOrWhiteSpace()যদি স্ট্রিংটি থাকে:
-শক্তি
-শক্তি-
কেবলমাত্র শ্বেত স্থান অন্তর্ভুক্ত করে


2
আমি হ্রাস পেয়েছি কারণ আপনি প্রতিটি ফাংশন কী করে তা ব্যাখ্যা করার সময় আপনি আসল প্রশ্নের উত্তর দেন না।
মঙ্গলবার

2
"ফ্রেম স্পেস" এর জন্য পুরো তালিকাটি অন্তর্ভুক্ত করার জন্য আপনার উত্তরটি সম্পাদনা করা উচিত, যেমন তিনি ফ্রেমওয়ার্ক দ্বারা সংজ্ঞায়িত: "সাদা স্থান" শব্দটিতে স্ক্রিনে দৃশ্যমান নয় এমন সমস্ত অক্ষর অন্তর্ভুক্ত রয়েছে। উদাহরণস্বরূপ, স্পেস, লাইন ব্রেক, ট্যাব এবং খালি স্ট্রিং সাদা স্থানের অক্ষর।
জর্জার

2

ইসনুলআরএম্পটি এবং ইসনুলআরহাইটস্পেসের সাথে এটি পরীক্ষা করে দেখুন

string sTestes = "I like sweat peaches";
    Stopwatch stopWatch = new Stopwatch();
    stopWatch.Start();
    for (int i = 0; i < 5000000; i++)
    {
        for (int z = 0; z < 500; z++)
        {
            var x = string.IsNullOrEmpty(sTestes);// OR string.IsNullOrWhiteSpace
        }
    }

    stopWatch.Stop();
    // Get the elapsed time as a TimeSpan value.
    TimeSpan ts = stopWatch.Elapsed;
    // Format and display the TimeSpan value. 
    string elapsedTime = String.Format("{0:00}:{1:00}:{2:00}.{3:00}",
        ts.Hours, ts.Minutes, ts.Seconds,
        ts.Milliseconds / 10);
    Console.WriteLine("RunTime " + elapsedTime);
    Console.ReadLine();

আপনি দেখতে পাবেন যে ইসনুলআরওহাইটস্পেসটি অনেক ধীর গতিতে: /


1
এটি সুস্পষ্ট কারণ ইসনুলআরএম্পটি ধ্রুবক সময় O (1) এ ঘটে যখন ইসনুলআরওয়াইটস্পেসে সম্ভবত স্ট্রিং বা ও (এন) সময়ের পূর্ণ পুনরাবৃত্তি প্রয়োজন। তারপরে আপনার সময়সাপেক্ষ উদাহরণটি আসলে প্রায় O (n ^ 2) সময় ব্যবহার করে। একটি সাধারণ-আকারের স্ট্রিং সহ একটি টাইমারের জন্য, পারফরম্যান্সের পার্থক্য নগণ্য হতে চলেছে। আপনি যদি খুব বেশি পরিমাণে পাঠ্য প্রক্রিয়াকরণ করে থাকেন বা বড় লুপে কল করছেন, তবে আপনি সম্ভবত এটি ব্যবহার করতে চাইবেন না।
চার্লস ওভেন

1

string.IsNullOrEmpty (str) - আপনি যদি স্ট্রিংয়ের মান সরবরাহ করতে চান তবে প্রদান করা হয়েছে

স্ট্রিং.আইসনলআরওহাইটস্পেস (স্ট্র) - মূলত এটি ইতিমধ্যে এক ধরণের ব্যবসায়িক লজিক বাস্তবায়ন (যেমন "" কেন খারাপ, তবে "~~" এর মতো কিছু ভাল)।

আমার পরামর্শ - ব্যবসায়িক যুক্তি প্রযুক্তিগত চেকগুলির সাথে মিশ্রিত করবেন না। সুতরাং, উদাহরণস্বরূপ, স্ট্রিং.আইএসএনউলআরম্পিটি তাদের ইনপুট পরামিতিগুলি পরীক্ষা করার জন্য পদ্ধতিগুলির শুরুতে ব্যবহার করা সবচেয়ে ভাল।


0

সমস্ত ধরার জন্য এটি কী ...

if (string.IsNullOrEmpty(x.Trim())
{
}

এটি সমস্ত স্থান ফাঁসিয়ে দিবে যদি তারা সেখানে ইসওয়াইটস্পেসের পারফরম্যান্স পেনাল্টি এড়িয়ে চলে, যা স্ট্রিংটি "শূন্য" শর্ত পূরণ করতে সক্ষম করে যদি এটি বাতিল হয় না।

আমি আরও মনে করি যে এটি পরিষ্কার এবং এটি সাধারণত ভাল অনুশীলন স্ট্রিংগুলি যেভাবেই ছাঁটাতে পারে বিশেষত যদি আপনি সেগুলি ডেটাবেস বা কোনও কিছুর মধ্যে রাখছেন।


34
এই চেকিংয়ে মারাত্মক ত্রুটি রয়েছে। এক্সকে ট্রিম () কল করার পরে এটি নাল হিসাবে পাস হয়ে গেলে নাল রেফারেন্সের ব্যতিক্রম হবে।
Г И І И О

9
ভাল যুক্তি. আমি ত্রুটি দেখাতে উত্তর ভুল ছেড়ে দিন।
রিমোটেক

1
ইসনুলআরওয়েইটস্পেস শ্বেত স্থানের জন্য স্ট্রিংটি পরীক্ষা করে এড়িয়ে নাল বা খালি পরীক্ষা করার জন্য আমার অনুকূলিত হতে পারে। এই পদ্ধতিটি সর্বদা ট্রিমিং অপারেশন সম্পাদন করবে। এছাড়াও, এটি অপটিমাইজ করা হতে পারে তবে এটি সম্ভবত মেমরির অন্য একটি স্ট্রিং তৈরি করবে।
স্প্রেগ

যদি (স্ট্রিং.আইসনলআরএম্পটি (এক্স?। ট্রিম ()) নাল ইস্যুটি ঘুরে দেখা উচিত
ক্যামেরন ফরোয়ার্ড

0

নেট মান 2.0 তে:

string.IsNullOrEmpty(): নির্দিষ্ট স্ট্রিং নাল বা খালি স্ট্রিং কিনা তা সূচিত করে।

Console.WriteLine(string.IsNullOrEmpty(null));           // True
Console.WriteLine(string.IsNullOrEmpty(""));             // True
Console.WriteLine(string.IsNullOrEmpty(" "));            // False
Console.WriteLine(string.IsNullOrEmpty("  "));           // False

string.IsNullOrWhiteSpace(): নির্দিষ্ট স্ট্রিং নাল, খালি, বা কেবল সাদা-স্পেস অক্ষর সমন্বিত কিনা তা সূচিত করে।

Console.WriteLine(string.IsNullOrWhiteSpace(null));     // True
Console.WriteLine(string.IsNullOrWhiteSpace(""));       // True
Console.WriteLine(string.IsNullOrWhiteSpace(" "));      // True
Console.WriteLine(string.IsNullOrWhiteSpace("  "));     // True
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.