1

C# で次のコードを記述するより短い方法はありますか。

var token = Session["token"];
if(token != null)
{
    if((String)token != "")
    {
        var a = (String)token;
    }
}

string.IsNullOrEmpty(Object.ToString())例外を引き起こさずに null になる可能性のある for オブジェクトに相当するものはありますか?

編集:実際のコードを表示し、変数名を「token」と「a」に置き換えます。var a は実際にはプロパティ参照ですが、将来の状況で役立つように、var a のままにしておきます。

4

7 に答える 7

10

冗長性を削除すれば、コードは最初からずっと簡単になります。

var value = Session["value"];
if (value != null)
{
    string text = value.ToString();
    if (text != "")
    {
        // Use text
    }
}

それはすでに各論理演算を 1 回表現しているので、これは良いことです。

または、null 合体演算子を使用することもできます。

var text = (Session["value"] ?? "").ToString();
if (text != "")
{
    ...
}
于 2013-01-25T15:51:54.760 に答える
3

これはどうですか:

var candidate = Convert.ToString(Session["var"]);
if(candidate.Length > 0){
     DoSomething(candidate);

}

Convert.ToString(Object)は、実際の型が何であれ、変換を処理しstring.Empty、値が の場合に戻りますnull

于 2013-01-25T15:59:24.690 に答える
2
object myObj = Session["value"];
if (myObj != null && myObj.ToString() != string.Empty)
string myStr = myObj.ToString();
于 2013-01-25T15:51:03.667 に答える
2

例外を回避するためasにキャストするために使用します。string

string text = Session["value"] as string;

if(!string.IsNullOrEmpty(text))
{
    var a = text;
}
于 2013-01-25T15:59:21.523 に答える
1

多分:

string value = Session["value"] as string ?? "";
// no need for an `if`
于 2013-01-25T15:53:36.303 に答える
1

やってみました?

if(!string.IsNullOrEmpty(Session["Value"]) as string)
{
      //do something
}

または

var a = string.IsNullOrEmpty(Session["value"] as string) ? "" : Session["value"].ToString();
于 2013-01-25T15:58:13.533 に答える
0

個人的には、単一のライナー??を呼び出す前に、ステートメントを文字列に解決するために括弧付き のnull合体演算子を利用して@JonSkeetの答えに行きます。ToString

別の無意味なオプション: 拡張メソッドの呼び出しは null の「ターゲット」で機能するため、これを拡張メソッドに圧縮できます。

public static class ObjectExtensions
{
    public static string SafeToString(this object o)
    {
        if (o != null)
        {
            return o.ToString();
        }

        return "";
    } 
}

次に、次のように呼び出すことができます。

string a = Session["value"].SafeToString();

if (string.IsNullOrEmpty(a))
{
    // Handle null or empty strings.
}

ただし、拡張メソッドのコンパイル方法を覚えていない限り、null item メソッドの呼び出しが機能するのは奇妙に見える可能性があるため、これを自分で行うかどうかはわかりません。

objectまた、名前空間に厳密でない場合、拡張によってオブジェクトの型インターフェイスが実際に汚染される可能性があります。

于 2013-01-25T16:05:35.663 に答える