Excelが使用するものなど、string.FormatにNULL値をフォーマットする構文があるかどうか疑問に思っていました
たとえば、Excelを使用して{0:#,000.00;-#,000.00,NULL}
の形式値を指定できます。これは、正の場合は数値形式として数値を表示し、負の場合は括弧で数値形式を表示します。
string.Format("${0:#,000.00;(#,000.00);NULL}", someNumericValue);
編集
数値だけでなく、すべてのデータ型のNULL
/Nothing
値の書式設定を探しています。
値がNULLの場合、Excelが3番目のパラメーターを使用すると誤って考えたため、私の例は実際には正しくありませんが、値が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 }));
値が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);
}
出力:
$123.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
文字列に特定の形式を指定できるものはないと思います。回避策は、次のように null-coalescing operator を使用することです。
const string DefaultValue = "(null)";
string s = null;
string formatted = String.Format("{0}", s ?? DefaultValue);
これは、あなたの望むことですか?
string test;
テスト?? "ヌル"
String.Format for .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());