C#のこれらのコマンドの違いは何ですか
string text= " ";
1-string.IsNullOrEmpty(text.Trim())
2-string.IsNullOrWhiteSpace(text)
IsNullOrWhiteSpace
は、優れたパフォーマンスを提供することを除いて、次のコードに似た便利なメソッドです。return String.IsNullOrEmpty(value) || value.Trim().Length == 0;
空白文字は、Unicode標準で定義されています。
IsNullOrWhiteSpace
メソッドは、Char.IsWhiteSpace
メソッドに空白文字として渡されたときにtrueの値を返す文字を解釈します。
最初のメソッドは、文字列がnullまたは空白文字列かどうかを確認します。あなたの例では、トリミングする前にnullをチェックしていないため、null参照のリスクがあります
1- string.IsNullOrEmpty(text.Trim())
2番目のメソッドは、文字列がnullか、文字列内の任意の数のスペース(空白文字列を含む)かどうかをチェックします
2- string .IsNullOrWhiteSpace(text)
メソッドIsNullOrWhiteSpace
はIsNullOrEmpty
をカバーしますが、文字列に空白が含まれる場合はtrue
も返します。
具体的な例では、2)を使用する必要があります2)アプローチ1)でnull参照例外のリスクを実行するため、nullである可能性のある文字列でtrimを呼び出すため
スペース、タブ\t
および改行\n
は違いです
string.IsNullOrWhiteSpace("\t"); //true
string.IsNullOrEmpty("\t"); //false
string.IsNullOrWhiteSpace(" "); //true
string.IsNullOrEmpty(" "); //false
string.IsNullOrWhiteSpace("\n"); //true
string.IsNullOrEmpty("\n"); //false
https://dotnetfiddle.net/4hkpKM
次の回答も参照してください。 空白文字
String.IsNullOrEmpty(string value)
は、文字列がnullまたは空の場合、true
を返します。参考のために、空の文字列は ""(2つの二重引用符文字)で表されます
String.IsNullOrWhitespace(string value)
は、文字列がnull、空、またはスペースやタブなどの空白文字のみを含む場合、true
を返します。
空白としてカウントされる文字を確認するには、このリンクを参照してください: http://msdn.Microsoft.com/en-us/library/t809ektx.aspx
これは、逆コンパイル後のメソッドの実装です。
public static bool IsNullOrEmpty(String value)
{
return (value == null || value.Length == 0);
}
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;
}
したがって、IsNullOrWhiteSpaceメソッドは、渡される値に空白が含まれているかどうかもチェックすることは明らかです。
空白の参照: https://msdn.Microsoft.com/en-us/library/system.char.iswhitespace(v = vs.110).aspx
文字列(変数text
)がnullになる可能性がある場合、これにより大きな違いが生じます。
1 -string.IsNullOrEmpty(text.Trim())
-> EXCEPTION nullオブジェクトのmthodeを呼び出すため
2 -string.IsNullOrWhiteSpace(text)
nullの問題は内部的にチェックされているため、これは正常に機能します。
最初のオプションを使用して同じ動作を提供するには、まずnullでないかどうかを何らかの方法でチェックしてからtrim()メソッドを使用する必要があります
if ((text != null) && string.IsNullOrEmpty(text.Trim())) { ... }
[パフォーマンステスト]誰かが疑問に思っている場合に備えて、ストップウォッチテストで比較します
if(nopass.Trim()。Length> 0)
if(!string.IsNullOrWhiteSpace(nopass))
これらは結果でした:
空の値= 15のトリム長
空でない値のトリム長= 52
空の値= 11のIsNullOrWhiteSpace
空でない値= 12のIsNullOrWhiteSpace
string.isNullOrWhiteSpace(text)は、ほとんどの場合、空白文字列も含む =。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
namespace Rextester
{
public class Program
{
public static void Main(string[] args)
{
//Your code goes here
var str = "";
Console.WriteLine(string.IsNullOrWhiteSpace(str));
}
}
}
True!を返します