Puis-je formater des valeurs NULL dans ssortingng.Format?

Je me demandais s’il y avait une syntaxe pour formater les valeurs NULL dans ssortingng.Format, comme ce qu’Excel utilise

Par exemple, en utilisant Excel, je pourrais spécifier une valeur de format {0:#,000.00;-#,000.00,NULL} , ce qui signifie afficher la valeur numérique sous forme de nombre si positif, format de parenthèse si négatif ou NULL si le la valeur est nulle

 ssortingng.Format("${0:#,000.00;(#,000.00);NULL}", someNumericValue); 

modifier

Je cherche à mettre en forme les valeurs NULL / Nothing pour tous les types de données, pas seulement ceux numériques.

Mon exemple est en fait incorrect car je pensais à tort qu’Excel utilisait le troisième paramètre si la valeur était NULL, mais il est effectivement utilisé lorsque la valeur est 0. Je le laisse là parce que c’est la chose la plus proche de ce que je pensais. en 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(ssortingng.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.ToSsortingng()); var new = (newObject.SomeValue == null ? "null" : newObject.SomeValue.ToSsortingng()); Log(ssortingng.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 mise en forme par défaut, par exemple:

 foreach (var value in new[] { 123456.78m, -123456.78m, 0m, (decimal?)null }) { ssortingng result = ssortingng.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 ssortingng Format(ssortingng format, object arg, IFormatProvider provider) { if (arg == null) { return "NULL"; } IFormattable formattable = arg as IFormattable; if (formattable != null) { return formattable.ToSsortingng(format, provider); } return arg.ToSsortingng(); } } 

Je ne pense pas qu’il y ait quoi que ce soit dans Ssortingng.Format qui vous permette de spécifier un format particulier pour null chaînes null . Une solution consiste à utiliser l’ opérateur null-coalescing , comme ceci:

 const ssortingng DefaultValue = "(null)"; ssortingng s = null; ssortingng formatted = Ssortingng.Format("{0}", s ?? DefaultValue); 

c’est ce que tu veux?

 ssortingng test; 

test ?? “NUL”

On dirait que Ssortingng.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 devrez probablement simplement gérer la valeur null manuellement:

 if (myval == null) // handle else return Ssortingng.Format(...); 

Vous pouvez utiliser une méthode d’extension:

  public static ssortingng ToDataSsortingng(this ssortingng prm) { if (prm == null) { return "NULL"; } else { return "'" + prm.Replace("'", "''") + "'"; } } 

Ensuite, dans votre code, vous pouvez faire:

 ssortingng Field1="Val"; ssortingng Field2=null; ssortingng s = ssortingng.Format("Set Value:{0}, NullValue={1}",Field1.ToDataSsortingng(), Field2.ToDataSsortingng());