Мне нужно создать строку параметров стиля CSV, сопоставленную с их значениями. Например:Возможно ли получить исходное имя параметра с помощью nameof() в выражении лямбда?
static void MyMethod(int i, string str, object obj, bool flag)
{
string example = "i=123,str=Hello,obj=1.0,flag=false";
}
Вызывается как:
MyMethod(123, "Hello", 1.0, false);
Я хотел бы вывод, как строки example
.
Мне нужно сделать это для большого количества методов, которые имеют много разных подписей, и могут не использовать все параметры в каждом методе без видимого шаблона - поэтому я попытался создать метод для автоматизации процесса несколько.
Я попытался решить эту проблему с помощью делегата и nameof:
delegate string GetParametersDelegate(params object[] parameters);
static GetParametersDelegate GetParametersFunc = (parameters) =>
{
return string.Join(",", parameters
.Select(parameter => nameof(parameter) + "=" + parameter));
};
Вызывается как:
static void MyMethod(int i, string str, object obj, bool flag)
{
string notTheResultIWant = GetParameters(i, str, obj, flag);
// notTheResultIWant = "parameter=123,parameter=Hello,parameter=1.0,parameter=false"
}
Я нашел, что это приводит к имени переменной в лямбда используется вместо исходного имени параметра - поэтому каждое значение некорректно отображается на parameter
из лямбда.
Является ли то, что я пытаюсь сделать, даже достичь? Или я могу подойти к этой проблеме другим способом?
Как о создании класса со всеми этими параметрами и прохождения это вместо этого. Таким образом вы можете «захватить» имена параметров в конструкторе и повторно использовать их везде. – i3arnon
Я только что уточнил в вопросе, но есть много разных сигнатур методов - я могу видеть, что вы предлагаете, и на самом деле интересно, я посмотрю на него. Моя единственная забота - это экспоненциальный рост этого класса! – TVOHM
Помогает ли вам этот вопрос? http://stackoverflow.com/questions/14489799/how-to-write-a-custom-poco-serializer-deserializer – devuxer