Tout d'abord, en tant que Marc mentionné dans sa réponse " le formatage standard s'appliquera, sans qu'il soit nécessaire de recourir à des éléments tels que les génériques, les méthodes d'extension ou les fonctions dynamiques. " donc, dans votre cas, vous n'avez pas besoin d'utiliser la fonction dynamic
vous pouvez simplement convertir directement en chaîne, mais pour ce qui est de la conversion de dynamique en chaîne, j'ai deux possibilités :
Premier moyen
string x = Convert.ToString(value) // value is a dynamic object
pros : c'est un bon moyen de conversion si vous n'êtes pas sûr que le type de données compilé supporte le casting en chaîne de caractères ou si c'est codé en dur. comme int par exemple,
contre : de cette façon peut causer des erreurs si vous essayez de faire Convert.ToString(value) // value is a dynamic object
à l'intérieur d'un Méthode d'extension quand je le fais, cela me donne cette erreur : "Les méthodes d'extension ne peuvent pas être dynamiquement. Considérez moulage les arguments dynamiques ou l'appel de la méthode d'extension sans la syntaxe de la méthode d'extension" .
donc si vous utilisez par exemple Asp.Net Core HttpContext.Session.SetString()
et vous mettez Convert.ToString(value) // value is dynamic object
en tant que conversion en ligne dans les arguments, vous obtiendrez l'erreur dans l'en-tête de l'article. contre Pour résoudre ce problème, vous pouvez affecter une variable en dehors des arguments de la fonction à la fonction Covert.ToString(value)
résultat puis envoyer la variable aux arguments de la fonction d'extension :
dynamic value = 10;
HttpContext.Session.SetString("key",Convert.ToString(value)); <-- error
résolution :
dynamic value = 10;
string x = Convert.ToString(value);
HttpContext.Session.SetString("key",x); // works fine
ou utiliser la deuxième méthode (coulée), s'assurer que le type de données compilé supporte le casting en string
HttpContext.Session.SetString("key",(string)value);
Deuxième voie
moulage dynamic
a string
si la version compilée type de données le soutient
string x = (string)value; //value is dynamic object
pros : -c'est utile si vous voulez faire une conversion en ligne à l'intérieur d'un fichier de type Méthode d'extension arguments -également utile si vous voulez vous assurer que le type de données compilé supporte le moulage en chaîne de caractères et générer une exception basée sur cette
contre : Cette méthode ne fonctionne pas pour tous les types de données. Si vous souhaitez une méthode de conversion plus générique, la première méthode est recommandée.
comme mentionné ici dans Docs MS "Le type dynamique permet aux opérations dans lesquelles il intervient de contourner la vérification de type en temps de compilation . Au lieu de cela, ces opérations sont résolu au moment de l'exécution. "
Ainsi, le dynamic
Le type de données de la variable est compilé au moment de l'exécution et prend un type différent de celui de la variable dynamic
et vous pouvez utiliser moulage si l'objet interprété le supporte ou utiliser Convert.ToString()
pour une conversion de type plus générique.
PS : si vous convertissez vers un type de données autre qu'une chaîne de caractères, vous risquez de perdre des données, comme lors de la conversion d'un flottant en int, soyez-en conscient.