Je voudrais vérifier si le nombre décimal est NULL ou s'il a une certaine valeur, puisque la valeur est attribuée à partir de la base de données dans l'objet de classe
public decimal myDecimal{ get; set; }
et puis j'ai
myDecimal = Convert.ToDecimal(rdrSelect[23].ToString());
J'essaie:
if (rdrSelect[23] != DBNull.Value)
{
myDecimal = Convert.ToDecimal(rdrSelect[23].ToString());
}
Mais j'obtiens ceci:
le résultat de l'expression est toujours 'true' puisqu'il s'agit d'une valeur de type 'décimal' n'est jamais égal à null
Comment puis-je vérifier si ce nombre décimal a une valeur?
Une décimale aura toujours une valeur par défaut. Si vous avez besoin d'un type nullable décimal, vous pouvez utiliser decimal?
. Ensuite, vous pouvez faire myDecimal.HasValue
vous pouvez utiliser ce code
if (DecimalVariable.Equals(null))
{
//something statements
}
decimal
est un value type
in .NET. Et les types de valeur ne peuvent pas être null
. Mais si vous utilisez nullable type
pour votre decimal
, alors vous pouvez vérifier si votre decimal
est null
ou non. Comme myDecimal?
Les types nullables sont des instances de la structure System.Nullable. Un nullable type peut représenter la plage normale de valeurs pour sa valeur sous-jacente type, plus une valeur supplémentaire null.
if (myDecimal.HasValue)
Mais je pense que dans votre base de données, si cette colonne contient des valeurs pouvant être annulées, alors il ne devrait pas être du type decimal
.
En supposant que vous lisiez à partir d'une ligne de données, vous voulez:
if ( !rdrSelect.IsNull(23) )
{
//handle parsing
}
Le type décimal est un type de valeur. Par conséquent, si vous souhaitez vérifier s'il a une valeur autre que la valeur pour laquelle il a été initialisé (zéro), vous pouvez utiliser la condition myDecimal! = Default (décimal).
Sinon, vous devriez éventuellement envisager l'utilisation d'un type nullable (décimal?) Et utiliser une condition telle que myNullableDecimal.HasValue
Si vous extrayez cette valeur directement d'une base de données SQL et que la valeur est nulle, ce sera en réalité l'objet DBNull
plutôt que null. Effectuez un contrôle avant votre conversion et utilisez une valeur par défaut dans le cas de DBNull
ou remplacez votre contrôle nul par la suite par un contrôle sur rdrSelect[23]
pour DBNull
.
Vous pouvez également créer un utilitaire pratique pour gérer les valeurs de la base de données dans de tels cas. Ex. Ci-dessous, la fonction qui vous donne Nullable Decimal à partir du type d'objet.
public static decimal? ToNullableDecimal(object val)
{
if (val is DBNull ||
val == null)
{
return null;
}
if (val is string &&
((string)val).Length == 0)
{
return null;
}
return Convert.ToDecimal(val);
}