Новый анонимный тип, заполненный для каждого цикла asp.net - PullRequest
0 голосов
/ 22 апреля 2020

Я пытаюсь упростить свой код:

foreach (var data in dataList) //conversion of DB data to output data (Action is added)
            {
                result.Add(new
                {
                    data.Id,
                    data.Files,
                     .
                     .
                     .
                    Action =    HtmlTags.CreateEditButton() + 
                                HtmlTags.CreateDeleteButton()

                });
            }

в «данных» у меня около 30 свойств.

Мой вопрос - можно ли было бы сделать что-то вроде this:

foreach (var data in dataList) //conversion of DB data to output data (Action is added)
            {
                result.Add(new
                {
                    foreach (var property in data.GetType().GetProperties()) //for each parameter
                    {
                        data.GetType().GetProperty(property.Name).GetValue(data),
                    }
                    Action =    HtmlTags.CreateEditButton() + 
                                HtmlTags.CreateDeleteButton()

                });
            }

Я использую это для отправки данных для просмотра (DataTable) и добавляю кнопки Edit и Delete для каждого элемента из базы данных - я выбрал анонимный тип, потому что я бы нужно удвоить все классы, которые у меня есть - просто добавить один элемент ...

1 Ответ

0 голосов
/ 22 апреля 2020

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

Я заставил его работать, используя следующий код:

public static void Main()
{
    var source = new SomeClass
    {
        Title = "Title",
        Description = "Test"
    };

    IDictionary<string, object> result = new ExpandoObject();

    foreach(var pi in typeof(SomeClass).GetProperties())
    {
        string propertyName = pi.Name;
        object propertyValue = pi.GetValue(source);

        result[propertyName] = propertyValue;
    }

    foreach(KeyValuePair<string, object> property in result)
    {
        Console.WriteLine(property.Key.ToString() + " " + property.Value.ToString());
    }
}

public class SomeClass
{
    public string Title {get;set;}
    public string Description {get;set;}
}

https://dotnetfiddle.net/v7ruAM

Надеюсь, это поможет вам решить вашу проблему

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