Как я могу динамически оценивать код C#?

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Этот ответ был написан еще c-sharp в 2008 году. С тех пор ландшафт c-sharp сильно изменился.

Посмотрите c#-language на другие ответы на этой reflection странице, особенно на ответ property Microsoft.CodeAnalysis.CSharp.Scripting.

Остальная часть ответа будет csharp оставлена ​​в том виде, в visual-c# котором она была первоначально reflect опубликована, но уже не является c#-language точной.


К сожалению, C# не reflect является таким динамическим visual-c# языком.

Однако вы можете создать .cs-file файл исходного кода C#, полный c#.net классов и всего остального, запустить visual-c# его через поставщика CodeDom properties для C#, скомпилировать его c#-2.0 в сборку, а затем выполнить.

Этот .cs-file пост на форуме MSDN содержит c-sharp ответ с некоторым примером property кода ниже по странице:
create a anonymous method from a string?

Я c#.net бы не сказал, что это очень property хорошее решение, но все же .cs-file возможно.

Какой код вы собираетесь properties ожидать в этой строке? Если properties это второстепенное подмножество reflection допустимого кода, например, просто c#.net математические выражения, возможно, существуют reflection и другие альтернативы.


Редактировать: Что property ж, это учит меня сначала properties внимательно читать вопросы. Да, отражение csharp могло бы помочь вам здесь.

Если property вы разделите строку на ; во-первых, чтобы c#-language получить отдельные свойства, вы c#-language можете использовать следующий c-sharp код, чтобы получить объект visual-c# PropertyInfo для определенного csharp свойства для класса, а затем properties использовать этот объект reflect для управления конкретным c-sharp объектом.

String propName = "Text";
PropertyInfo pi = someObject.GetType().GetProperty(propName);
pi.SetValue(someObject, "New Value", new Object[0]);

Ссылка: PropertyInfo.SetValue Method

c#

reflection

properties

c#-2.0

2022-10-30T05:21:56+00:00
Вопросы с похожей тематикой, как у вопроса:

Как я могу динамически оценивать код C#?