42

文字列にNULL値をフォーマットするための構文があるかどうか疑問に思いました。Excelが使用するものなどのフォーマット。

たとえば、Excelを使用して、フォーマット値を指定できます{0:#,000.00;-#,000.00,NULL}。これは、数値を正の場合は数値フォーマット、負の場合は括弧内の数値フォーマット、値がnullの場合は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 }));
4

5 に答える 5

33

値がデフォルトの書式設定された文字列である場合は返すカスタム フォーマッタを定義できます。たとえば、次のようになります。"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();
    }
}
于 2011-10-07T15:15:54.120 に答える
13

文字列String.Formatの特定の形式を指定できるものはないと思います。回避策は、次のようにnull合体演算子nullを使用することです。

const string DefaultValue = "(null)";

string s = null;
string formatted = String.Format("{0}", s ?? DefaultValue);
于 2011-10-07T15:07:35.407 に答える
2

これは、あなたの望むことですか?

string test;

テスト ??"ヌル"

于 2011-10-07T15:07:57.373 に答える
1

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(...);
于 2011-10-07T15:08:45.613 に答える
0

拡張メソッドを使用できます。

 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());
于 2012-06-23T20:32:36.333 に答える