Ceci est une ancienne révision du document !
Table des matières
Évaluation d'une expression (opération ou condition) sous forme de texte
La première (mauvaise) solution est d'utiliser ScriptControl. Ce composant est dépendant de Windows et n'est pas compatible 64 bits. La plateforme cible doit être x86 et non Any CPU. En plus, il ne s'agit pas d'un composant natif c# et donc la modification de code à la volée (en debug) d'une fonction contenant ce contrôle est impossible.
MSScriptControl.ScriptControl sc = new MSScriptControl.ScriptControl(); sc.Language = "VBScript"; string expression = "1+1"; object result = null; try { result = sc.Eval(expression); } catch (COMException) { throw new Exception("Impossible d'évaluer l'expression VB : " + expression); } string resultat = result.ToString();
La bonne solution est d'utiliser DataTable.
DataTable dt = new DataTable(); object result = null; try { result = dt.Compute(condition, ""); } catch (SyntaxErrorException) { throw new Exception("Impossible d'évaluer l'expression VB : " + condition); } string resultat = result.ToString();
Concaténation de string
Il est fortement déconseillé d'utiliser dans des boucles la concaténation de string puisqu'en interne, C# crée à chaque fois un nouveau string. Dans ce cas, il est conseillé d'utiliser un StringBuilder.
StringBuilder stringBuilder = new StringBuilder("Début"); stringBuilder.Append("coucou").Append(", bien le bonjour."); string finalement = stringBuilder.ToString();
Valeur numérique d'un caractère
Un simple cast.
int val = (int) 'Y';
Cependant, cela ne marche pas forcément très bien en fonction des besoins : le symbole œ renverra 339 et non pas 156.
Pour récupérer 156, il faut :
Encoding.Default.GetBytes("œ")[0];
Expression régulière
Regex regex = new Regex(@"^.*:\s*DB\s*(.*)(,.*)*(;.*)?$"); Match match = regex.Match(texte); if (match.Success) { Console.WriteLine(match.Groups[0].Value); }
Le caractère null
Pour déterminer la longueur d'une chaîne de caractère, on utilise la propriété Length, là où en C, on recherche le caractère null.
Mais il peut arriver qu'une chaîne de caractère (en C#) possède un caractère null. Pour vérifier sa présence, il faut faire tout simplement :
texte.IndexOf('\0') != -1
