33

たとえばデータベースから空の文字列にnull値を変換する関数を作成したいと思います。ifなどのメソッドがあることは知っていますが、メソッドvalue != null ?? value : String.Emptyに渡す方法はありますか?null

public string nullToString(string? value)
{
    if(value == null) return empty;
    return value
}

しかし、これを行うためのパラメーター構文についてはよくわかりません。

上記を試しましたが、null許容型ではないと表示されます。

前もって感謝します。

4

16 に答える 16

36
static string NullToString( object Value )
{

    // Value.ToString() allows for Value being DBNull, but will also convert int, double, etc.
    return Value == null ? "" : Value.ToString();

    // If this is not what you want then this form may suit you better, handles 'Null' and DBNull otherwise tries a straight cast
    // which will throw if Value isn't actually a string object.
    //return Value == null || Value == DBNull.Value ? "" : (string)Value;


}
于 2012-09-06T13:28:01.777 に答える
34

データベースからNULL値を取得すると、返される値はDBNull.Valueです。この場合、呼び出すだけで、次の値が返されます.ToString()""

例:

 reader["Column"].ToString() 

返さ""れる値がDBNull.Value

シナリオが常にデータベースであるとは限らない場合は、拡張メソッドを使用します。

public static class Extensions
{

    public static string EmptyIfNull(this object value)
    {
        if (value == null)
            return "";
        return value.ToString();
    }
}

使用法:

string someVar = null; 
someVar.EmptyIfNull();
于 2012-09-06T13:07:28.303 に答える
24

Convert.ToString(object)文字列に変換します。オブジェクトがの場合、それを空の文字列nullに変換します。Convert.ToString

.ToString()null値を持つオブジェクトを呼び出すと、がスローされSystem.NullReferenceExceptionます。

編集:

ルールの2つの例外:

1)ConvertToString(string)null文字列では、常にnullが返されます。

2)ToString(Nullable<T>)null値の場合、""を返します。

コードサンプル:

// 1) Objects:

object obj = null;

//string valX1 = obj.ToString();           // throws System.NullReferenceException !!!
string val1 = Convert.ToString(obj);    

Console.WriteLine(val1 == ""); // True
Console.WriteLine(val1 == null); // False


// 2) Strings

String str = null;
//string valX2 = str.ToString();    // throws System.NullReferenceException !!!
string val2 = Convert.ToString(str); 

Console.WriteLine(val2 == ""); // False
Console.WriteLine(val2 == null); // True            


// 3) Nullable types:

long? num = null;
string val3 = num.ToString();  // ok, no error

Console.WriteLine(num == null); // True
Console.WriteLine(val3 == "");  // True
Console.WriteLine(val3 == null); // False 

val3 = Convert.ToString(num);  

Console.WriteLine(num == null);  // True
Console.WriteLine(val3 == "");  // True
Console.WriteLine(val3 == null); // False
于 2014-03-14T18:00:01.277 に答える
17

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

string result = value ?? "";
于 2012-09-06T13:05:50.833 に答える
8

C#6でこれをさらに短くすることは可能です:

public string NullToString(string value)
{
    return value?.ToString() ?? string.empty;
}
于 2016-07-11T11:49:36.693 に答える
1

を使用できますConvert.ToString((object)value)。最初に値をオブジェクトにキャストする必要があります。そうしないと、変換によってnullが発生します。

using System;

public class Program
{
    public static void Main()
    {
        string format = "    Convert.ToString({0,-20}) == null? {1,-5},  == empty? {2,-5}";
        object nullObject = null;
        string nullString = null;

        string convertedString = Convert.ToString(nullObject);
        Console.WriteLine(format, "nullObject", convertedString == null, convertedString == "");

        convertedString = Convert.ToString(nullString);
        Console.WriteLine(format, "nullString", convertedString == null, convertedString == "");

        convertedString = Convert.ToString((object)nullString);
        Console.WriteLine(format, "(object)nullString", convertedString == null, convertedString == "");

    }
}

与える:

Convert.ToString(nullObject          ) == null? False,  == empty? True 
Convert.ToString(nullString          ) == null? True ,  == empty? False
Convert.ToString((object)nullString  ) == null? False,  == empty? True

System.DBNull.ValueをConvert.ToString()に渡すと、空の文字列にも変換されます。

于 2015-08-12T14:12:59.107 に答える
1

「?」は使用可能です。(null条件付きメンバーアクセス)「??」(null合体演算子)このように:

public string EmptyIfNull(object value)
{
    return value?.ToString() ?? string.Empty;
}

このメソッドは、オブジェクトの拡張メソッドとしても記述できます。

public static class ObjectExtensions
{
    public static string EmptyIfNull(this object value)
    {
        return value?.ToString() ?? string.Empty;
    }
}

また、「=>」(ラムダ演算子)を使用して同じメソッドを記述できます。

public string EmptyIfNull(object value)
    => value?.ToString() ?? string.Empty;
于 2017-05-28T12:54:25.300 に答える
1

たとえば、??""を使用できます。

y=x??""

xがnullでない場合y=xが、xがnullの場合y = ""

于 2018-10-21T14:56:12.390 に答える
1

1. string.Format

string.Formatnullを空の文字列に変換するを使用できます

string nullstr = null;
string  quotestring = string.Format("{0}", nullstr);
Console.WriteLine(quotestring);//Output- ""

2.文字列補間

または、string interpolation.この機能を使用できます。C#6以降のバージョンで使用できます。

InterpolatedExpressionは、フォーマットされる結果を生成します。null結果の文字列表現はですString.Empty

 string nullstr = null;
 string  quotestring = $"{nullstr}";
 Console.WriteLine(quotestring);//Output- ""
于 2019-05-22T06:21:42.250 に答える
1

nullの可能性があるオブジェクトに空の文字列を追加するだけの場合もあります。

object x = null;
string y = (x + "").ToString();

これは例外をスローすることはなく、nullの場合は常に空の文字列を返し、ifthenロジックは必要ありません。

于 2020-06-25T19:49:38.783 に答える
0
public string nullToString(string value)
{
    return value == null ?string.Empty: value;   
}
于 2012-09-06T13:05:48.447 に答える
0
 public string ToString(this string value)
        {
            if (value == null)
            {
                value = string.Empty;
            }               
            else
            {
                return value.Trim();
            }
        }
于 2014-01-16T13:25:45.417 に答える
0

それは古いトピックですが、それを行うための「エレガントな」方法があります...

static string NullToString( object Value )
{       
    return Value = Value ?? string.Empty;    
}
于 2016-11-24T15:56:13.997 に答える
0

あなたはこれを試すことができます

public string ToString(this object value)
{
    // this will throw an exception if value is null
    string val = Convert.ToString (value);

     // it can be a space
     If (string.IsNullOrEmpty(val.Trim()) 
         return string.Empty:
}
    // to avoid not all code paths return a value
    return val;
}
于 2018-06-30T12:03:15.843 に答える
0

null合体演算子C#8.0以降を使用できます

値??=string.Empty;

??=演算子

于 2021-08-02T09:34:33.357 に答える
-3

次のMSDNページによると、Convert.ToStringメソッドが必要です

string x = Convert.ToString((object)value)
于 2020-07-09T10:40:25.260 に答える