1

私はこのコードに出くわしました:

if (txtUPC.Text.ToString() != null)

...そして、このテストが有効かどうか疑問に思います - text プロパティが null になる可能性はありますか? txtUPC は動的に作成されるコントロールではありません。もちろん、空にすることも、空白だけを含めることもできますが、null ですか? もしそうなら、その方法を知りたいです。繰り返しますが、テキスト プロパティで ToString() を呼び出すと、サスペンダーとベルトを着用しているようにも見えます。

アップデート

したがって、私にとっては (.NET 1.1、Windows CE/Compact Framework を思い出してください)、これは次のように思われます。

if (txtUPC.Text.Trim() != string.Empty)

...これよりも優れたテストです:

if (txtUPC.Text.ToString() != null) 

ただし、このコードをさらに注意深く見ると、いずれにせよ、外側または内側のガントレットのいずれかが冗長/不必要であるように見えます。メソッドに含まれる 2 つの shibbeleth-pronunciation-checker に注意してください。

if (txtUPC.Text.ToString() != null) 
{
    if (txtUPC.Text.Length > 0)
    {
                    . . .
    else
    {
        MessageBox.Show("Please enter a value in the item field");
        txtUPC.Focus();
    }
}
else
{
    MessageBox.Show("Please enter a value in the item field");
    txtUPC.Focus();
}
. . .

ゲートキーパー/ガントレット 1 人で十分なようです。次の方法で確認します。

if (txtUPC.Text.Trim() != string.Empty)

...またはこの方法:

if (txtUPC.Text.Trim().Length > 0)

4

2 に答える 2

9

nullになることはないと思います(おそらく、winforms/asp.net/wpfテキストボックスに違いがありますが、そうは思いません)。より良いチェックは次のようになりますが:

if (String.IsNullOrEmpty(txtUPC.Text) { ... }

または、要件に応じて:

if (String.IsNullOrWhiteSpace(txtUPC.Text) { ... }

はい、.ToString()必要ありません。

于 2013-09-16T23:47:19.117 に答える
4

そのコードで見られる問題.ToString()は、オブジェクトを文字列として返すことです。この場合、オブジェクトが文字列の場合、元の文字列を返します (そのまま)。

問題は、がnull.Textの場合、 のメソッド呼び出しで..ToString()NullReferenceException

.ToStringオーバーライドの詳細については、こちらをご覧ください

例については、次のコードを参照してください。

String str1 = "";
String str2 = null;

Console.WriteLine("Original str1: {0}", str1);
Console.WriteLine("Original str2: {0}", str2);

Console.WriteLine("ToString str1: {0}", str1.ToString());
Console.WriteLine("ToString str2: {0}", str2.ToString());

ToString str2行に例外をスローします

于 2013-09-16T23:50:33.433 に答える