programing

string.IsNullOrEmpty(string) 대 string.IsNull 또는화이트스페이스(문자열)

testmans 2023. 5. 20. 10:31
반응형

string.IsNullOrEmpty(string) 대 string.IsNull 또는화이트스페이스(문자열)

의 사용 여부string.IsNullOrEmpty(string)는 '악습'이 때입니다.string.IsNullOrWhiteSpace(string). 4NET 4.0 이상?

가장 적합한 항목을 선택하는 것이 가장 좋습니다.

.Net Framework 4.0 베타 2에는 새로운 IsNullOr이 있습니다.IsNullOrEmpty() 메서드를 일반화하여 빈 문자열 이외의 다른 공백도 포함하는 문자열에 대한 WhiteSpace() 메서드입니다.

공백이라는 용어는 화면에 표시되지 않는 모든 문자를 포함합니다. 예를 들어 공백,바꿈, 탭 문자열은 공백 문자*입니다.

참조: 여기

성능의 경우 IsNullOrWhiteSpace는 이상적이지는 않지만 좋습니다.메서드를 호출하면 성능 저하가 약간 발생합니다.또한 IsWhiteSpace 메서드 자체에는 유니코드 데이터를 사용하지 않는 경우 제거할 수 있는 몇 가지 지시사항이 있습니다.항상 그렇듯이, 섣부른 최적화는 사악할 수도 있지만 재미도 있습니다.

참조: 여기

소스 코드 확인(참조 소스 .NET Framework 4.6.2)

Null 또는 비어 있음

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

IsNull 또는화이트스페이스

[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

실행 방식의 차이:

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

그것들은 다른 기능입니다.당신은 당신의 상황에 맞게 무엇이 필요한지 결정해야 합니다.

저는 그것들 중 어떤 것도 나쁜 관행으로 생각하지 않습니다.은 부분의시간대시.IsNullOrEmpty()충분합니다.하지만 당신은 선택할 수 있습니다 :)

다음은 두 방법의 실제 구현입니다(dotPeek을 사용하여 디컴파일됨).

[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;
    }

그것은 모든 것을 말해줍니다.IsNullOrEmpty()는 동안 공백을 포함하지 않습니다.IsNullOrWhiteSpace()합니다!

IsNullOrEmpty()문자열인 경우:
-Null
-비어 있음

IsNullOrWhiteSpace()문자열인 경우:
-Null
-비어 있음
-공백만 포함

IsNullOrEmpty 및 IsNullOrwhiteSpace를 사용하여 확인하십시오.

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();

IsNullOr을 확인할 수 있습니다.WhiteSpace가 훨씬 느립니다 :/

이스케이프 문자 주의:

String.IsNullOrEmpty(""); //True
String.IsNullOrEmpty(null); //True
String.IsNullOrEmpty("   "); //False
String.IsNullOrEmpty("\n"); //False
String.IsNullOrEmpty("\t"); //False
String.IsNullOrEmpty("hello"); //False

그리고 여기:

String.IsNullOrWhiteSpace("");//True
String.IsNullOrWhiteSpace(null);//True
String.IsNullOrWhiteSpace("   ");//True
String.IsNullOrWhiteSpace("\n");//True
String.IsNullOrWhiteSpace("\t");//True
String.IsNullOrWhiteSpace("hello");//False

IsNullOrEmpty()에 전달된 값에 Trim을 적용하면 두 메서드의 결과가 동일합니다.

성능 문제로, IsNullOrWhiteSpace()가 더 빠릅니다.

에서.순 표준 2.0:

string.IsNullOrEmpty()지정한 문자열이 null인지 빈 문자열인지 나타냅니다.

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

string.IsNullOrWhiteSpace()지정한 문자열이 null인지, 비어 있는지, 공백 문자로만 구성되어 있는지 나타냅니다.

Console.WriteLine(string.IsNullOrWhiteSpace(null));     // True
Console.WriteLine(string.IsNullOrWhiteSpace(""));       // True
Console.WriteLine(string.IsNullOrWhiteSpace(" "));      // True
Console.WriteLine(string.IsNullOrWhiteSpace("  "));     // True

string.IsNullOrEmpty(str) - 문자열 값이 제공되었는지 확인하려면

string.IsNullOrWhiteSpace(str) - 기본적으로 이것은 이미 일종의 비즈니스 논리 구현입니다(즉, ""가 나쁜 이유이지만 "~~"와 같은 것은 좋습니다).

제 조언은 - 비즈니스 논리와 기술적 점검을 혼동하지 말라는 것입니다.예를 들어, 끈입니다.IsNullOrEmpty는 메서드의 시작 부분에서 입력 매개 변수를 확인하는 데 사용하는 것이 가장 좋습니다.

잡으려면 이거 어때요?

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

이렇게 하면 IsWhiteSpace의 성능 저하를 피할 수 있는 모든 공간이 트리밍되어 null이 아닌 경우 문자열이 "빈" 조건을 충족할 수 있습니다.

저는 또한 이것이 더 명확하고 특히 데이터베이스나 다른 것에 문자열을 넣을 때 일반적으로 문자열을 트리밍하는 것이 좋다고 생각합니다.

언급URL : https://stackoverflow.com/questions/6976597/string-isnulloremptystring-vs-string-isnullorwhitespacestring

반응형