Outils pour utilisateurs

Outils du site


lang:csharp:textes

Ceci est une ancienne révision du document !


É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();

Source, Archive

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';

Source, Archive

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);
}

Source, Archive

lang/csharp/textes.1494929274.txt.gz · Dernière modification : 2017/05/16 12:07 de root