Я сейчас пытаюсь сгенерировать класс в виде string с некоторыми свойствами, которые я должен установить перед компиляцией кода.
Давайте посмотрим на мой код, яиспользую статическую строку:
public class NewHumanSource
{
static readonly string template =
"internal class {ClassName} : IHuman " +
"{ " +
// bunch of private fields here;
"private int age; " + Environment.NewLine +
"public int Age" + Environment.NewLine +
"{" + Environment.NewLine +
"get =>" + $"{int.Parse("{Age}")}" + ";" + Environment.NewLine +
"set" + Environment.NewLine +
"{" + Environment.NewLine +
"age= value;" + Environment.NewLine +
"OnPropertyChanged(nameof(age));" +Environment.NewLine +
"}" + Environment.NewLine +
"}" + Environment.NewLine + Environment.NewLine +
// Other properties and members
";"
Статический член, который используется для установки значений в шаблоне исходного кода:
public static string GetSourceCode(IHuman newHuman, string className)
{
code = code.Replace("{ClassName}", className.ToLowerInvariant().Replace(" ", ""));
code = code.Replace("{Age}", newHuman.Age.ToString()); //Age is an integer.
//...
}
Затем вызывается из внешнего класса:
var code = NewHumanSource.GetSourceCode(newHuman, className);
В этой строке выдается исключение.Статический метод даже не загружается:
System.TypeInitializationException: 'The type initializer for 'DynamicCompilerTest.Classes.DynamicCompiler.NewHumanSource' threw an exception.'
InnerException {"Input string was not in a correct format."} System.Exception {System.FormatException}
Он бы работал нормально, если бы все свойства были строками, но эта интерполяция строк вызывает исключение:
"get =>" + $"{int.Parse("{Age}")}" + ";" +
Любое представление окак я должен обрабатывать не строковый тип?Мне нужно обрабатывать встроенный тип, как DateTime и тому подобное.Или есть даже более элегантный способ создать класс в виде текста со значениями свойств?Я мог бы получить удовольствие от форматирования.
Большое спасибо за вашу помощь / советы!