我想创建一个转换任何空值的函数,例如从数据库到空字符串。
我知道有一些方法,例如if value != null ?? value : String.Empty
但是有办法将null
传递给方法,例如。
public string nullToString(string? value)
{
if(value == null) return empty;
return value
}
但我不确定参数语法是否可以这样做..
我尝试了上述内容,但它说不是可以为空的类型。
提前致谢。
答案 0 :(得分:27)
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;
}
答案 1 :(得分:24)
当您从数据库获取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();
答案 2 :(得分:20)
Convert.ToString(object)
转换为字符串。如果对象为null
,则Convert.ToString
会将其转换为空字符串。
在具有空值的对象上调用.ToString()
会抛出System.NullReferenceException
。
编辑:
规则的两个例外:
1)空字符串上的ConvertToString(string)
将始终返回null。
2)空值上的ToString(Nullable<T>)
将返回“”。
代码示例:
// 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
答案 3 :(得分:12)
您可以使用null coalesce运算符。
string result = value ?? "";
答案 4 :(得分:4)
使用C#6可以缩短它的时间:
public string NullToString(string Value)
{
return value?.ToString() ?? "";
}
答案 5 :(得分: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(),它也将转换为空字符串。
答案 6 :(得分:1)
可以使用“?”。 (null条件成员访问)与“??” (null-coalescing operator)像这样:
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;
}
}
你可以使用“=&gt;”编写相同的方法(lambda运算符):
public string EmptyIfNull(object value)
=> value?.ToString() ?? string.Empty;
答案 7 :(得分:0)
public string nullToString(string value)
{
return value == null ?string.Empty: value;
}
答案 8 :(得分:0)
public string ToString(this string value)
{
if (value == null)
{
value = string.Empty;
}
else
{
return value.Trim();
}
}
答案 9 :(得分:0)
这是一个古老的话题,但是有一个优雅的&#34;这样做的方式......
static string NullToString( object Value )
{
return Value = Value ?? string.Empty;
}
答案 10 :(得分: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;
}
答案 11 :(得分:0)
您可以使用??“” 例如:
y=x??""
如果x不为空y = x但如果x为空y =“”
答案 12 :(得分:0)
1。 string.Format
您可以使用string.Format
将空值转换为空字符串
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- ""
答案 13 :(得分:0)
有时我只是将一个空字符串附加到可能为null的对象上。
object x = null;
string y = (x + "").ToString();
这将永远不会引发异常,并且如果为null则始终返回一个空字符串,并且如果那么逻辑则不需要。
答案 14 :(得分:0)
答案 15 :(得分:-3)
根据以下MSDN page,您需要使用Convert.ToString
方法
string x = Convert.ToString((object)value)