Всем привет! Хочу поделиться небольшим кусочком кода для быстрого вычисления математических выражений из строк, который изначально был написан для моей инди игры - 4X стратегии MyCivGame. Проект я решил назвать Context EXpressions ?.

Строки анализируются один раз, затем могут быстро вычисляться с разным контекстом. В контекст помещаются начальные значения переменных, результат вычисления также будет помещен в контекст.

Пример:

var context = new Dictionary<string, double>();

context.Add("a", 2);
context.Add("b", 5);

var expression = new ComplexExpression(@"
    c = 9;
    result1 = a + b + c;
    result2 = (a + b) * c;
    result3 = (a + b - 5) ^ (3 * a);
    result4 = result2 / 1000;
    x = result1 - result2 / 15.6 * (-result3) - result4;
");

expression.Call(context);

Содержание словаря после вычисления:

a = 2
b = 5
c = 9
result1 = 16
result2 = 63
result3 = 64
result4 = 0,063
x = 274,39853846153846

На данный момент поддерживаются конструкции: +, -, *, /, ^, ( ), строки разделяются с помощью ";" или ",". Для моей игры этого достаточно, но если кто-то хочет продолжить развивать эту библиотеку, добро пожаловать в мой Telegram-канал, где можно пообщаться со мной, и где я рассказывают про разработку моей игры, а также на GitHub этого проекта!

Комментарии (5)


  1. barkalov
    26.10.2025 15:33

    Для моей игры этого достаточно, но если кто-то хочет продолжить развивать эту библиотеку, добро пожаловать в мой Telegram-канал, где можно пообщаться со мной

    Вы совсем охренели уже... Во что вы превратили Хабр.


    1. kirichenec
      26.10.2025 15:33

      В пикабу) Там такое уже давно)

      Для Хабра допустим только гитхаб в данном случае, имхо