web-dev-qa-db-ja.com

C#.NET 3.5でオブジェクトがnullまたは空であることを確認する方法

オブジェクトにnullまたは空が含まれている場合、その条件を検証またはチェックする方法は?

オブジェクトobjnullまたはEmptyであるかどうかをブール値でチェックする方法

私は次のようにコーディングしました:

class Program
{
    static void Main(string[] args)
    {
        object obj = null;

        double d = Convert.ToDouble(string.IsNullOrEmpty(obj.ToString()) ? 0.0 : obj);
        Console.WriteLine(d.ToString());
    }
}

このコードで私はNullReference Exception なので Object reference not set to an instance of an object.

Plsは助けます。

ここでは得られません...

。ToString()に変換せずに、そのオブジェクトがnullまたはEmptyであるかどうかを検証する方法??

同じことをチェックするアプローチはありますか?

8
venkat

あなたが遭遇している問題は、あなたのオブジェクトがタイプ、まあ、オブジェクトであるということです。 string.IsNullOrEmptyで評価するには、(string)へのキャストでオブジェクトを渡す必要があります

そのようです:

static void Main(string[] args)
{
    object obj = null;

    double d = Convert.ToDouble(string.IsNullOrEmpty((string)obj) ? 0.0 : obj);
    Console.WriteLine(d.ToString());
}

(存在しない)オブジェクトで.ToStringを明示的に呼び出さないため、これは正常に機能します。

13
Stefan H

ObjのToString()メソッドの戻り値を返すobj.ToString()を実行しているため、null参照を取得しています。問題は、前の行でobjをnullに設定したため、オブジェクト参照が取得されないことです...エラー

コードを機能させるには、次のことを行う必要があります。

//This will check if it's a null and then it will return 0.0 otherwise it will return your obj.
double d = Convert.ToDouble(obj ?? 0.0); 

現在のコードは常に0.0になります

Nullの合体なし:(??)

double d = Convert.ToDouble(obj ? 0.0 : obj);    

[〜#〜]編集[〜#〜]

コメントから正しく理解できれば、オブジェクトがnullか空の文字列かを知りたいと思います。これを行うには、まったく異なる処理を行う ToString メソッドを呼び出す代わりに、最初に文字列にキャストします。

string objString = (obj as string);
double d = Convert.ToDouble(string.IsNullOrEmpty(objString) ? "0.0" : objString);      
3
TBohnen.jnr
class Program
{
    static void Main(string[] args)
    {
        object obj = DBNull.Value;
        if(obj != DBNull.Value) {
            double d = Convert.ToDouble(obj);
            Console.WriteLine(d.ToString());
        }
    }
}
2
user3245067

??演算子。 null-coalescing 演算子として知られています。

1
Mohit Vashistha

あなたがやりたいことはこれです:

object obj = null;
double d;

if (!double.TryParse(Convert.ToString(obj), out d))
{
   d = 0.0;
}

しかし、その質問はあまり意味がありません。

1
Dmitry S.

以下のコードは、それを達成するためのより安全な方法である可能性があります。

if(obj != null && !string.IsNullOrEmpty(obj.ToString()))
{

}

このコードは、文字列型ではないオブジェクトから私たちを救います。

このコードでNullReferenceExceptionを取得しても、少し驚いてはいけません。問題の部分は

obj.ToString()

あなたが書いた場合

object obj = null;
string s = obj.ToString();

あなたはNullReferenceExceptionを期待するでしょう。 ToStringの呼び出しはstring.IsNullOrEmptyの呼び出しの前に発生するため、nullまたは空の文字列のチェックが行われる前に例外がスローされます。

0
Adam Mihalcin