C# Meilleur moyen de convertir les dynamiques de la chaîne
Suivantes obtient un champ à partir d'une DataTable et la convertit en chaîne. Est-il le moyen le plus propre à convertir dynamique de chaîne?
dynamic value = dataTable.Rows[i].Field<dynamic>(columnName);
value = (value == null) ? null : value.ToString();
Vous devez vous connecter pour publier un commentaire.
la mise en forme standard donnera un coup de pied dans, sans le besoin pour des choses comme les génériques, les méthodes d'extension ou dynamique.
dynamic
avait dans l'OP du code...Tout d'abord que Marc mentionné dans sa réponse "la mise en forme standard donnera un coup de pied dans, sans le besoin pour des choses comme les génériques, les méthodes d'extension ou dynamique" , donc dans votre cas vous n'avez pas à utiliser
dynamic
mot-clé , il vous suffit de convertir directement à la chaîne, mais de parler de la conversion de dynamique à la chaîne, j'ai deux façons:Première
donc, si vous êtes par exemple à l'aide de Asp.Net Core
HttpContext.Session.SetString()
et vous mettez
Convert.ToString(value) //value is dynamic object
en ligne de conversion dans les arguments, il vous donnera l'erreur dans le contre secion, pour résoudre cela, vous pouvez affecter une variable à l'extérieur de la fonction, les arguments de laCovert.toString(value)
résultat, alors d'envoyer la variable à la fonction d'extension arguments :résoudre:
ou utiliser le deuxième moyen (casting), assurez-vous que les données compilées type prend en charge la conversion de la chaîne de
Deuxième Façon
cast
dynamic
àstring
si l'compilé type de données prend en chargecomme mentionné ici dans MS docs "Le type dynamique permet les opérations dans lesquelles il se produit à contourner le type de compilation vérification. Au lieu de cela, ces opérations sont résolu au moment de l'exécution."
De sorte que le
dynamic
de la variable de type de données est compilé au moment de l'exécution et prend un autre type quedynamic
, et vous pouvez les utiliser casting si le interprétée objet prend en charge ou de l'utilisationConvert.toString()
pour plus générique de conversion de type.PS: si vous voulez convertir à un type de données de chaîne vous pouvez faire face à la perte de données , comme la conversion de float en int , donc être conscient de cela.
Convert.ToString
pouvez le manipuler, ce qui est des tas plus probable. Notez que, à titre d'exemple, si la valeur sous-jacente est uneint
, vous obtiendrez une erreur d'exécution deRuntimeBinderException
: "Impossible de convertir le type 'int' en 'string'".JObject
vous pouvez convertir numérique données à l'intérieur de chaîne json à chaîne avec casting, et qui a dit qu'il veulent garantir que la valeur du champ est une chaîne de caractères , peut-être veut-il lever une exception si elle ne l'est pas.var listOfInts = new List<int>();
var x = listOfInts.Select(i => Convert.ToString(i));
J'ai un cas où la dynamique devrait être une chaîne de caractères, mais une erreur de cas est un nombre (code, je l'ai appeler et ne peut pas changer est de faire que).
Dans mon cas, je n':