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();
c# - Evaluating string _3_(4+2)_ yield int 18 - Stack Overflow Archive du 02/12/2008 le 28/04/2020
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';
How to get a Char from an ASCII Character Code in c# - Stack Overflow Archive du 05/08/2010 le 28/04/2020
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); }
C# Regex.Match Examples_ Regular Expressions - Dot Net Perls Archive le 28/04/2020
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
Comparaison insensible à la casse
StartsWith("texte", StringComparison.OrdinalIgnoreCase); EndsWith("texte", StringComparison.OrdinalIgnoreCase); IndexOf("texte", StringComparison.OrdinalIgnoreCase); Equals("texte1", "texte2", StringComparison.OrdinalIgnoreCase);