33

我想创建一个函数来将任何空值例如从数据库转换为空字符串。我知道有诸如 if 之类的方法,value != null ?? value : String.Empty但是有没有办法传递null给方法,例如

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

但我不确定执行此操作的参数语法..

我尝试了上述方法,但它说不是可以为空的类型。

提前致谢。

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)转换为字符串。如果对象是nullConvert.ToString则将其转换为空字符串。

调用.ToString()具有 null 值的对象会引发System.NullReferenceException.

编辑:

规则的两个例外:

1)ConvertToString(string)对空字符串将始终返回空值。

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

您可以只使用空合并运算符。

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

1.字符串.格式

您可以使用string.Formatwhich 将 null 转换为空字符串

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

2.字符串插值

或者您可以使用string interpolation.C# 6 及更高版本中提供的此功能。

InterpolatedExpression 生成要格式化的结果。空结果的字符串表示形式是String.Empty

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

有时我只是将一个空字符串附加到一个可能为空的对象上。

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

这永远不会抛出异常,并且如果为 null 并且不需要 if then 逻辑,则始终返回一个空字符串。

于 2020-06-25T19:49:38.783 回答
1

你可以使用 ??"" 例如:

y=x??""

如果 x 不为空 y=x 但如果 x 为空 y=""

于 2018-10-21T14:56:12.390 回答
1

可以使用“?”。(空条件成员访问)带有“??” (空合并运算符)像这样:

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;
    }
}

您可以使用“=>”(lambda 运算符)编写相同的方法:

public string EmptyIfNull(object value)
    => value?.ToString() ?? string.Empty;
于 2017-05-28T12:54:25.300 回答
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 回答
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

您可以使用 null-coalescing-operator C# 8.0 及更高版本

值 ??=string.Empty;

??= 运算符

于 2021-08-02T09:34:33.357 回答
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 回答
-3

根据以下MSDN 页面,您需要该Convert.ToString方法

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