gaurav modi Ответов: 4

C#.Net передайте строку в условие IF и скомпилируйте ее


Здравствуйте друзья,
Я хочу скомпилировать или выполнить строку в состоянии if.У меня есть строка, которая содержит оператор типа conditions.

например:
string test="2>4";
if(test)
{//do something
}
else
{}

Я хочу запустить этот тип кода.

Заранее спасибо.
ГАУРАВ МОДИ

ПРИВЕТ JF2015,
Спасибо за ваш ответ,но я не хочу математических parser.it может быть строка.

как моя строка может быть: "('abc'== 'as')&& (122> 34)"
так что в нашем сценарии это неправильно.
так будет называться наша другая часть.

Andreas Gieriet

Решение 1 самый лучший ответ можно дать. Ваш ответ вообще не имеет смысла...
Строка сама по себе-это последовательность символов. Итак, что вы подразумеваете под этим "[...] это может быть строка...]"?

Сначала вы можете спросить себя, в чем разница между:
- string test1 = "2>4"; а ты можешь позвонить if (test1) ...?
- bool test2 = 2>4 ; а ты можешь позвонить if (test2) ...?

gaurav modi

Привет, фрнд, не могли бы вы объяснить мне пример кода, потому что мое состояние содержит слишком много внутренних состояний.Вот моя струна вроде :
"( [abc] >=3) | | ([xyz] == 3 || [xys] == 5)".
хорошо?
И мои слова "[abc] " и "[xyz] " будут заменены любым числом или string.so я хочу разобрать эту новую строку в состоянии IF.
таким образом, я могу выполнить свою следующую строку кода, основанную на результате этого условия IF. Не могли бы вы помочь мне в этом вопросе?

Andreas Gieriet

Каково ваше понимание синтаксического анализа? Есть опыт?
Прежде всего я должен понять каковы ваши ожидания:
- Это выражение синтаксиса C# или SQL или как бы совершенно самостоятельно придумали?
- А где же ... [name] откуда? Это местная разновидность или что-то другое?
- Насколько сложным может быть [имя]? Напр. inst.part.section.para[5].sent[3].word[2]
- Что такое система типов? Все double только или какие-то другие типы тоже разрешены? А как насчет совместимости типов? например, могу ли я сравнить double с bool?

Чего именно ты хочешь? Если это будет "как если бы я ввел его в C#", то вы должны пойти на Объект codedomprovider подход.

Andreas Gieriet

Почему у вас есть строка, а не выражение непосредственно в C#?
Откуда у тебя такое выражение лица? Из графического интерфейса?

Если выражение дано в тексте (строке), то, пожалуйста, взгляните на подписи ниже или любые другие Google: парсер выражений C# Пример кода - от 30 строк до нескольких сотен. Я не буду размещать их здесь. Пожалуйста, поищите в интернете.

Наконец: это домашнее задание?

gaurav modi

привет спасибо за Ваш ответ,
существует сравнение между string to string и int to int. но одна строка содержит проверку обоих типов.
предположим, моя строка выглядит так :
строка s = "(объект.statename !=\"Тест\" ) и усилитель; & (объект.Перт !=\"АЗ\")";
хорошо?
А obj. statename и obj.cityname имеют значение во время выполнения.
obj-это мой класс, а statename и cityname-свойства этого класса.

поэтому я хочу просто знать, что данное условие строки истинно или ложно.

Andreas Gieriet

См. мое решение № 4 ниже.
Овации
Энди

4 Ответов

Рейтинг:
2

Clifford Nelson

У меня есть несколько статей о преобразователях значений для вычисления выражений. они должны быть полезны, и они указывают на другие варианты. Я, как правило, используется JavaScript-функции eval. Существует также статья об использовании Roslyn.

Преобразователь значений для оценки входных данных пользовательского уравнения[^]

Использование Roslyn ScriptEngine для ValueConverter для обработки пользовательского ввода[^]

Это должно помочь


Рейтинг:
2

Andreas Gieriet

Вы можете использовать Придумайте свой собственный динамический парсер LINQ[^] и оставить obj. по твоему выражению лица прочь.

Использование:

public class MyClass
{
   string StateName { get; private set; }
   string CityName  { get; private set; }
   ...
}
...
string expr = "StateName != \"Test\" && CityName != \"AZ\"";
var f = SimpleExpression.PredicateParser<MyClass>.Parse(expr).Compile();
var query = from e in myCollection where f(e) select e;
...
foreach(var item in query)
{
   ...
}


Овации
Энди


Рейтинг:
0

Suraj Babu

Пожалуйста, обратите внимание на это решение. Это поможет вам
http://www.c-sharpcorner.com/UploadFile/mgold/CodeDomCalculator08082005003253AM/CodeDomCalculator.aspx[^]