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)
[Pure]
public static bool IsNullOrEmpty(String value) {
return (value == null || value.Length == 0);
}
[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
'programing' 카테고리의 다른 글
호출 한 번으로 객체 배열을 몽구스의 배열로 푸시하는 방법은 무엇입니까? (0) | 2023.05.20 |
---|---|
iOS 7에서 UITableView 구분자를 수정하는 방법은 무엇입니까? (0) | 2023.05.20 |
WPF가 GC를 호출하는 것을 피할 수 있는 모든 방법.반사 외에 수집(2)? (0) | 2023.05.20 |
Excel OleDb를 사용하여 시트 이름을 시트 순서로 가져오기 (0) | 2023.05.20 |
이클립스: 동일한 파일을 두 편집기에서 열었습니까? (0) | 2023.05.20 |