Могу ли я форматировать значения NULL в строке.Формат?
мне было интересно, есть ли синтаксис для форматирования нулевых значений в строке.Формат, например, что Excel использует
например, используя Excel, я мог бы указать значение формата {0:#,000.00;-#,000.00,NULL}
, что означает отображение числового значения в виде числового формата, если положительное, числового формата в скобках, если отрицательное, или NULL, если значение равно null
string.Format("${0:#,000.00;(#,000.00);NULL}", someNumericValue);
редактировать
Я ищу форматирование NULL
/Nothing
значения для всех типов данных, а не только числовые те.
мой пример на самом деле неверен, потому что я ошибочно думал, что Excel использовал 3-й параметр, если значение было NULL, но на самом деле он используется, когда значение равно 0. Я оставляю его там, потому что это самое близкое к тому, что я надеялся сделать.
Я надеюсь избежать оператора коалесцирования null, потому что я пишу записи журнала, и данные обычно не являются строкой
было бы намного проще что-то написать как
Log(string.Format("Value1 changes from {0:NULL} to {1:NULL}",
new object[] { oldObject.SomeValue, newObject.SomeValue }));
чем писать
var old = (oldObject.SomeValue == null ? "null" : oldObject.SomeValue.ToString());
var new = (newObject.SomeValue == null ? "null" : newObject.SomeValue.ToString());
Log(string.Format("Value1 changes from {0} to {1}",
new object[] { old, new }));
5 ответов
вы можете определить пользовательский модуль форматирования возвращает "NULL"
, если значение null
и в противном случае форматированная строка по умолчанию, например:
foreach (var value in new[] { 123456.78m, -123456.78m, 0m, (decimal?)null })
{
string result = string.Format(
new NullFormat(), "${0:#,000.00;(#,000.00);ZERO}", value);
Console.WriteLine(result);
}
выход:
3.456,78
$(123.456,78)
$ZERO
$NULL
Пользовательский Модуль Форматирования:
public class NullFormat : IFormatProvider, ICustomFormatter
{
public object GetFormat(Type service)
{
if (service == typeof(ICustomFormatter))
{
return this;
}
else
{
return null;
}
}
public string Format(string format, object arg, IFormatProvider provider)
{
if (arg == null)
{
return "NULL";
}
IFormattable formattable = arg as IFormattable;
if (formattable != null)
{
return formattable.ToString(format, provider);
}
return arg.ToString();
}
}
Я не думаю, что в String.Format
Это позволит вам указать определенный формат для null
строки. Обходным путем является использование нуль-коалесцирующий оператор, например:
const string DefaultValue = "(null)";
string s = null;
string formatted = String.Format("{0}", s ?? DefaultValue);
похоже на строку.Формат для .NET действует так же, как Excel, т. е. вы можете использовать ;
разделитель для положительных, отрицательных и 0 значений, но не NULL:http://msdn.microsoft.com/en-us/library/0c899ak8.aspx#SectionSeparator.
вы, вероятно, просто придется обрабатывать значение null вручную:
if (myval == null)
// handle
else
return String.Format(...);
вы можете использовать метод расширения:
public static string ToDataString(this string prm)
{
if (prm == null)
{
return "NULL";
}
else
{
return "'" + prm.Replace("'", "''") + "'";
}
}
тогда в вашем коде вы можете сделать:
string Field1="Val";
string Field2=null;
string s = string.Format("Set Value:{0}, NullValue={1}",Field1.ToDataString(), Field2.ToDataString());