Функция преобразования значения null в строку
Я хочу создать функцию для преобразования любого нулевого значения, например. от базы данных до пустой строки.
Я знаю, что существуют такие методы, как value != null ?? value : String.Empty
, но есть способ передать null
методу, например.
public string nullToString(string? value)
{
if(value == null) return empty;
return value
}
Но я не уверен в синтаксисе параметров для этого.
Я попробовал выше, но он говорит не тип с нулевым значением.
Спасибо заранее.
Ответы
Ответ 1
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;
}
Ответ 2
Когда вы получаете значение 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();
Ответ 3
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
Ответ 4
Вы можете просто использовать оператор null coalesce.
string result = value ?? "";
Ответ 5
Возможно сделать это еще короче с С# 6:
public string NullToString(string Value)
{
return value?.ToString() ?? "";
}
Ответ 6
Вы можете использовать Convert.ToString((object)value)
. Сначала нужно передать свое значение объекту, иначе преобразование приведет к нулевому значению.
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(), он также будет преобразован в пустую строку.
Ответ 7
Можно использовать "?". (нулевой доступ к условному члену) с "??" (оператор нуль-коалесцирования) следующим образом:
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;
Ответ 8
public string nullToString(string value)
{
return value == null ?string.Empty: value;
}
Ответ 9
public string ToString(this string value)
{
if (value == null)
{
value = string.Empty;
}
else
{
return value.Trim();
}
}
Ответ 10
Его старая тема, но есть "элегантный" способ сделать это...
static string NullToString( object Value )
{
return Value = Value ?? string.Empty;
}
Ответ 11
Вы можете попробовать это
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;
}
Ответ 12
Вы можете использовать?? "" например:
y=x??""
если x не нуль, y = x, но если x нуль, y = ""
Ответ 13
1. строка. Формат
Вы можете использовать string.Format
которая преобразует string.Format
в пустую строку
string nullstr = null;
string quotestring = string.Format("{0}", nullstr);
Console.WriteLine(quotestring);//Output- ""
2.строчная интерполяция
или вы можете использовать string interpolation.
эта функция доступна в С# 6 и более поздних версиях.
InterpolatedExpression создает результат для форматирования. Строковое представление нулевого результата - String.Empty
.
string nullstr = null;
string quotestring = $"{nullstr}";
Console.WriteLine(quotestring);//Output- ""