1

stringたとえば、体重と身長を持つ患者オブジェクトなど、プロパティを持つオブジェクトがあります。

しかし、プロパティが null の場合、プロパティが null に設定されているため、コードを使用しようとすると失敗します。文字列/プロパティが null かどうかをチェックする関数を作成しようとしています。そうであれば、プロパティを に設定します""

私はこれを行うことができることを知っています:

if(string.isNullOrEmpty(patient.weight)) patient.weight = "";

しかし、コードをできるだけきれいにする必要があり、多くのプロパティがあるため、それぞれを手動でチェックしたくありません。理想的には、(null であっても失敗せずに) 文字列を取得し、null でない場合は値を返すか、null の""場合は a を返す関数が必要です。

誰でもこれについて手がかりを教えてもらえますか?

4

10 に答える 10

5

個人的には、これらのプロパティを次のように記述することで、これらのプロパティが null にならないようにします。

private string _Name = string.Empty;
public string Name
{
    get
    {
        return _Name;
    }
    set
    {
        _Name = value ?? string.Empty;
    }
}

しかし、あなたが探しているのはおそらく、上記で使用されているnull-coalescing operator??とも呼ばれる演算子であり、基本的には次の式です。

x = y ?? z;

はこれと同じ意味です:

if (y != null)
    x = y;
else
    x = z;

それも完全に真実ではありません。上記の例yでは 2 回評価されますが、これは演算子では発生しない??ため、より適切な近似は次のようになります。

var temp = y;
if (temp != null)
    x = temp;
else
    x = z;
于 2011-10-19T20:12:33.183 に答える
2

null合体演算子は、ここであなたの友達のように聞こえます。

string text = patient.Name ?? "";

同じことを行う拡張メソッドを作成することもできますが、オペレーターの方が読みやすくなる可能性が高いと思います。

これはプロパティを設定しないことに注意してください-しかし、それはあなたが望むものではありません.

理想的には、文字列を取り (null であっても失敗しない)、単純に値 (null でない場合) を返すか、null の場合は "" を返す関数が必要です。

上記のコードがまさにそれです。

于 2011-10-19T20:10:43.447 に答える
2

このようなもの ?

public string EmptyIfNull(string value) 
{
    return value ?? String.Empty;
}
于 2011-10-19T20:10:58.520 に答える
2

null 合体演算子を使用します。

string s = Patient.Name ?? string.Empty;

したがって、Patient.Nameが null の場合はs、空の文字列に設定されます。

于 2011-10-19T20:11:03.200 に答える
2

myString ?? string.Emptyこれにより、文字列、または null の場合は string.Empty が得られます。

于 2011-10-19T20:11:15.853 に答える
1

??演算子を使用して、任意のオブジェクトが null の場合に選択したデフォルト値を返すことができます。

string a = null;
a = a ?? "womble";
// a now has the value "womble"

string b = "fluff";
b = b ?? "cabbage";
// b wasn't null, so it still has the value "fluff"
于 2011-10-19T20:12:55.427 に答える
1

あなたが求めているものがあなたにとって最善の解決策であるかどうかはわかりません。毎回 a をチェックしたくない場合は、String代わりにフィールドを に初期化することをお勧めします。""nullString""

private String height = "";

それ以外の

private String height;

ところで、正当な理由がない限り、heightand weightasDoubleや notのような値を保存する必要があります。String

于 2011-10-19T20:14:14.380 に答える
0

WeightHeightが整数の場合、null にすることはできません。オブジェクトがnullで、null オブジェクトのHeight of Weightを取得しようとしている場合、コードは単純に間違っています。文字列が null の場合、null 文字が出力されます。

以下は非常にエレガントです。

if ( String.isNullOrEmpty(patient.weight) )
{
//DO STUFF HERE
}
else
{
//DO OTHER STUFF HERE
}

患者が null の場合、このコード ブロックに含まれるべきではないことを理解してください。

isNullOrEmptyを使用している場合、次のことは無意味です。

patient.weight = "";

著者のメモ

文字列がnullであると問題が発生する理由がわかりません。初期化時に値を空の文字列に設定することに関するポイントはもちろん有効です。

于 2011-10-19T20:14:01.593 に答える
0

@Jon のアイデアをさらに一歩進めることができるので、?? の使用について心配する必要はありません。どこにでも:

アクセス方法を次のように定義します。

private String m_name = null;
public String Name
{
    get { return m_name ?? String.Empty; }
    set { m_name = value; }
}

Name プロパティにアクセスすると、null 合体演算子が実行されます。

于 2011-10-19T20:22:54.413 に答える
0

null 合体演算子に挨拶します。

于 2011-10-19T20:11:51.500 に答える