Prenez cet exemple:Comment se débarrasser des frais généraux de conversion?
customer.Salary = Convert.ToDecimal(string.Format("{0}! ", Console.ReadLine().ToString()));
(1) Pourquoi C# nous devons toujours mettre .ToString() pour y arriver?
(2) Convert.To ... Cela ne crée-t-il pas des frais inutiles? En outre dans le code ci-dessous: Il donne une erreur: "La chaîne d'entrée n'était pas dans un format correct", après avoir accepté l'entrée de l'utilisateur.
// Main begins program execution.
public static void Main()
{
Customer customer = new Customer();
// Write to console/get input
Console.Write("Enter customer's salary: ");
customer.Salary = Convert.ToDecimal(string.Format("{0}! ", Console.ReadLine().ToString()));
Console.WriteLine("Salary in class variable is: {0}", customer.Salary.ToString());
Console.Read();
}
class Customer
{
public Decimal Salary { get; set; }
}
Là encore, soit je dois utiliser:
string sal = Convert.ToDecimal(string.Format("{0}! ", Console.ReadLine().ToString()));
customer.Salary = Convert.ToDecimal(sal);
Ou, je dois changer le type de données lui-même dans la classe client.
Cette surcharge peut-elle être évitée avec n'importe quoi dans les génériques?
Pouvez-vous expliquer comment fonctionne en interne Convert.ToDecimal et Decimal.Parse? – RKh
En général, vous devriez préférer 'Decimal.TryParse' car il tente la conversion et retourne 'false' si la conversion a échoué. 'Convert.ToDecimal', d'autre part, déclenche une exception en cas d'erreur. Particulièrement dans le code de l'interface utilisateur, il est beaucoup plus facile de gérer une valeur de retour «false» que de gérer des exceptions. En interne, je ne sais pas vraiment comment les deux diffèrent. Je suppose que lors de la conversion d'une chaîne en décimal, 'Convert.ToDecimal' finit par appeler' Decimal.Parse'. –