Je me demandais s'il y avait une syntaxe pour formater les valeurs NULL dans string.Format, comme ce qu'Excel utilise
Par exemple, en utilisant Excel, je pourrais spécifier une valeur de format de {0:#,000.00;-#,000.00,NULL}
, ce qui signifie afficher la valeur numérique au format numérique s'il est positif, au format numérique entre parenthèses s'il est négatif ou NULL si la valeur est nulle
string.Format("${0:#,000.00;(#,000.00);NULL}", someNumericValue);
Modifier
Je recherche des valeurs de formatage NULL
/Nothing
pour tous les types de données, pas seulement numériques.
Mon exemple est en fait incorrect parce que je pensais à tort qu'Excel a utilisé le 3e paramètre si la valeur était NULL, mais il est en fait utilisé lorsque la valeur est 0. Je le laisse là parce que c'est la chose la plus proche à laquelle je peux penser de ce que j'étais espérant faire.
J'espère éviter l'opérateur de coalescence nul parce que j'écris des enregistrements de journal, et les données ne sont généralement pas une chaîne
Il serait beaucoup plus facile d'écrire quelque chose comme
Log(string.Format("Value1 changes from {0:NULL} to {1:NULL}",
new object[] { oldObject.SomeValue, newObject.SomeValue }));
que d'écrire
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 }));
Vous pouvez définir un formateur personnalisé qui renvoie "NULL"
si la valeur est null
et sinon la chaîne formatée par défaut, par exemple:
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);
}
Sortie:
$123.456,78
$(123.456,78)
$ZERO
$NULL
Formateur personnalisé:
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();
}
}
Je ne pense pas qu'il y ait quoi que ce soit dans String.Format
qui vous permettra de spécifier un format particulier pour les chaînes null
. Une solution de contournement consiste à utiliser opérateur de coalescence nulle , comme ceci:
const string DefaultValue = "(null)";
string s = null;
string formatted = String.Format("{0}", s ?? DefaultValue);
C'est ce que tu veux?
string test;
test ?? "NUL"
Il ressemble à String.Format pour .NET agit de la même manière qu'Excel, c'est-à-dire que vous pouvez utiliser ;
séparateur pour les valeurs positives, négatives et 0, mais pas NULL: http://msdn.Microsoft.com/en-us/library/0c899ak8.aspx#SectionSeparator .
Vous n'aurez probablement qu'à gérer manuellement la valeur nulle:
if (myval == null)
// handle
else
return String.Format(...);
Vous pouvez utiliser une méthode d'extension:
public static string ToDataString(this string prm)
{
if (prm == null)
{
return "NULL";
}
else
{
return "'" + prm.Replace("'", "''") + "'";
}
}
Ensuite, dans votre code, vous pouvez faire:
string Field1="Val";
string Field2=null;
string s = string.Format("Set Value:{0}, NullValue={1}",Field1.ToDataString(), Field2.ToDataString());