Можно ли создать свойство из строки в C#? - PullRequest
0 голосов
/ 23 января 2020

У меня есть список строк в C#, и я хочу провести l oop по списку и добавить каждый элемент списка в качестве свойства моего класса. Например:

public class test
{
 List<string> inputList = new List<string> {"add", "subtract", "multiply"};
 foreach(var val in inputList)
 {
   //code to convert string to property
 }
}

После запуска приведенного выше кода, когда я создаю новый объект класса test, я хотел бы получить: test.add или test.subtract et c. и я должен иметь возможность присваивать значения этим свойствам.

Возможно ли это? Если да, может кто-нибудь предложить лучший способ сделать это?

Продолжая выше, цель здесь - добавить API. Список здесь загружается динамически. Я должен был начать с более подходящего списка в качестве примера.

public class test
    {
     List<string> inputList = new List<string> {"name", "age", "dob"};
     foreach(var val in inputList)
     {
       //code to convert string to property of the class test
     }
    }

После запуска кода я должен иметь возможность назначать значения для name, age и dob в качестве пользовательских входных данных, т.е.

test.name = "blah"
test.age = "123"

Поскольку список динамически обновляется, элементы (и их количество) в списке будут различаться. Все элементы в списке должны быть добавлены в качестве свойства теста класса, и пользователь должен иметь возможность назначать значения этим свойствам во время выполнения.

1 Ответ

1 голос
/ 23 января 2020

Вы можете использовать dynamic для достижения этой цели. Хотя очень полезно знать о концепции dynamic и о том, как ее использовать, это убивает преимущества использования строго типизированного языка и проверки времени компиляции, и его следует использовать, только когда альтернатива более болезненна:

List<string> inputList = new List<string> {"add", "subtract", "multiply"};

var builder = new System.Dynamic.ExpandoObject() as IDictionary<string, Object>;

foreach(var val in inputList)
{
   builder.Add(val, $"{val}: some value here"); 
}   

var output = (dynamic)builder;

Console.WriteLine(output.add);
Console.WriteLine(output.subtract);
Console.WriteLine(output.multiply);
...