Quelle est la meilleure approche pour résoudre le c # exception unboxing lors de la coulée d'un objet à un valuetype?

StackOverflow https://stackoverflow.com/questions/1153612

  •  18-09-2019
  •  | 
  •  

Question

Je viens converti un extrait de code de VB.NET à C # et sommes tombés sur cette question.

Considérez ce code:

    Dim x As Integer = 5
    Dim y As Object = x
    Dim z As Decimal = CType(y, Decimal)

Pas d'erreur du compilateur ou lors de l'exécution. z est égal à cinq.

Traduisons ce code C #

    int x = 5;
    object y = x;
    decimal z = (decimal)y;

Pas d'erreur du compilateur, mais lors de l'exécution d'une exception est levée:

    Cannot unbox "y" to "decimal"

Maintenant, ma question est, ce qui serait le plus intelligent C # façon de le faire.

mon code ressemble actuellement.

    int x = 5;
    object y = x;
    decimal z = decimal.Parse(y.ToString());

Mais une autre solution serait:

    decimal z = (decimal)(int)y;

Ce qui semble un peu confus, mais a propably moins de frais généraux que decimal.Parse, je suppose.

Était-ce utile?

La solution

(decimal)(int)x est la bonne façon de le faire si vous vous attendez à l'objet boxed un entier. Conversion en chaîne et l'analyse syntaxique est pas une bonne façon d'attaquer le problème et encourt certains frais généraux.

Si vous savez l'objet peut être converti en decimal d'une certaine façon, essayez la méthode de System.Convert.ToDecimal. Il va gérer pour vous.

Autres conseils

Que diriez-vous:

z = Convert.ToDecimal(y);

Convert.ToDecimal (y);

Si vous voulez être totalement sûr, vous pouvez essayer:

    int x = 5;
    object y = x;
    decimal z;
    if (Decimal.TryParse(y.ToString(), out z))
    {
        // z is a decimal
    }
    else
    {
        // z is not a decimal
    }

De cette façon, si quelqu'un y met à = « âne », vous pouvez le manipuler sans lancer une exception. Bien sûr, vous pouvez préférer jeter une exception si z ne peut pas être converti. Juste une autre option ...

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top