c # лямбда-свойство отображать в строку - PullRequest
0 голосов
/ 26 октября 2018

У меня есть данные в словаре, аналогичном приведенному ниже:

«ключ 1»: «данные 1»,

«ключ 2»: «данные 2»,

"ключ 3": "данные 3",

и класс:

public class OuputClass
{
    public string Field1 { get; set; }
    public string Field2 { get; set; }
}

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

var result = MapData<Class1>(x => x.Field1 = "key 1", x.Field2 = "key 3")

В функции MapData я хочу иметь возможность обрабатывать 2 свойства, переданные в функцию, и возвращать новый экземпляр OutputClass с установленными свойствами.(Field1 = "data 1" и Field2 = "data 3")

Я рассмотрел использование Func и IQueryable, но, похоже, не могу заставить его работать элегантно

Спасибо за любую помощь.

Ниже приведен пример функции ToObject:

 public static T ToObject<T>(Func<T, IQueryable> mapper) where T : new()
    {
        //code to create the class (more complex then this)
        var data = new T();

        //if mapper needed then loop through properties specified and use string mapped to each property
        foreach (var item in .....)
        {
            //code to get value needed to set property
            var mappedstring = ...... //get string mapped to property
            var newpropvalue = ...... //use mapped string to access dictionary value;

            //set property of instance
            data.... = newpropvalue;
        }

        return data;
    }

1 Ответ

0 голосов
/ 26 октября 2018

вы можете создать такой метод:

    public T MapData<T>(Func<T> func)
    {
        var res = func();
        return res;
    }

И вызвать метод, как этот

    var dic= new Dictionary<string, string>();

    //Fill Dictionary

    MapData<OuputClass>(() => new OuputClass { Field1 = dic["Key 1"] , Field2 = dic["Key 2"] });

Я надеюсь помочь вам

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...