7
votes

Comment convertir la décimale suivante? à la chaîne ("F2")

J'ai décimal? Montant

dans mon modèle, j'ai une valeur comme @ item.sales, que je tente d'écrire comme @ item.sales.tostring ("F2").

I`M Avoir l'erreur d'erreur de message 1 Aucune surcharge pour la méthode 'Tostring' prend 1 arguments

Comment puis-je atteindre ce qui précède


0 commentaires

4 Réponses :


18
votes

Si c'est une décimale nullable, vous devez d'abord obtenir la valeur non nullable: xxx

bien sûr, qui lancera une exception si @ item.sales est en fait une valeur nulle, vous auriez donc besoin de vérifier cela en premier.


9 commentaires

Yep, il suffit d'ajouter "si (@ item.sales.hasvalue) {... faire la conversion ...}"


Je n'ai pas la méthode de hasvalue à mon avis. Le message d'erreur est une erreur 1 'décimal' ne contient pas de définition pour «hasvalue» et aucune méthode d'extension 'HASVALUE' Accepter un premier argument de type 'décimal' (vous manque-t-il à la directive ou à une référence d'assemblage?)


@ user281180: Dans ce cas, votre valeur n'est pas de type décimale? En premier lieu - Pourquoi avez-vous inclus le point d'interrogation au milieu de votre titre? Mais ensuite appelant Tostring ("F2") devrait être bien ...


@jon: la valeur est de type décimal ?. Le code @ item.sales.tostring ("F2") fonctionne bien s'il est de type décimal et non décimal?


@ user281180: Si la valeur est vraiment de type décimale? alors vous devriez pouvoir utiliser hasvalue . L'erreur du compilateur suggère fortement que le type est juste décimal plutôt que décimal? . Quelle que soit @ item.sales.hasvalue ou @ item.sales.tostring ("F2") devrait travail. Vous n'essayez pas @ item.sales.value.hasvalue étiez-vous?


@Jon, je ne peux tout simplement pas obtenir th .hasvalue ... je manque de référence?


@ user281180: Non, mais ce n'est pas clair exactement Qu'est-ce que vous essayez. Est-ce que @ item.sales.value.tostring ("F2") travail?


Je peux difficilement accès à .value, cela me donne une erreur lorsque j'écris @ item.sales.value


@ user281180: Eh bien, c'est @ item.sales ou @ item.sales ? C # est sensible à la casse.



1
votes
if( item.Sales.HasValue )
{
    item.Sales.Value.ToString(....)
}
else
{
 //exception handling
}

0 commentaires

4
votes

Vous pouvez créer une méthode d'extension afin que le code principal soit plus simple xxx

et vous pouvez l'appeler comme ceci: xxx


0 commentaires

0
votes

Utilisez le Unaire? opérateur à exécuter .tostring () uniquement lorsqu'il y a un objet xxx

ou utilisez le double ?? opérateur le rend donc non nullable: xxx

c'est mieux que @ item.sales.value.tostring ("F2") parce que si vous Ne vérifiez pas la valeur NULL avant d'utiliser .tostring ("F2") Le code se cassera au moment de l'exécution.


2 commentaires

Ou si vous voulez laisser des valeurs nulles vierges; @ item.sales? .tostring ("F2")


Merci @jeremylakeman, je mettrai à jour ma réponse avec votre suggestion car elle utilise moins de code pour obtenir un effet similaire.