Outils pour utilisateurs

Outils du site


lang:csharp:textes

É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);
lang/csharp/textes.txt · Dernière modification : 2020/04/28 21:18 de root