Member 13992723 Ответов: 2

Можно ли бросить переменная тип: словарь и Л;int, модели.пользователь> в словарь и Л;int, Объект> В языке C#?


Всем привет. Я работаю над приложением на языке c#, где у меня есть около 15 методов, которые обновляют записи в базе данных. Поэтому я хочу сделать один метод для обновления с двумя параметрами: Dictionary<int, object> dictionary и string tableName. Объектная часть словаря будет принимать различные модели представления. Вот мой код:

public void UpdateEntriesFromAGivenTable(Dictionary<int, object> dictionary, string tableName)
        {
            foreach (KeyValuePair<int, object> entry in dictionary)
            {
                Dictionary<string, object> dict = GetTypeNamesAndValuesWithReflection(entry.Value);

                foreach (var item in dict)
                {
                    if (item.Value != null && (!string.Equals(item.Key, "id")))
                    {
                        UpdateEntry(tableName, item.Key, item.Value, entry.Key);
                    }
                }
            }
        }


Но когда я попытался использовать описанный выше метод, я получил красное подчеркивание под параметром "Dictionary<int, user>" и сообщение об ошибке: не удается преобразовать из 'System.Коллекции.Generic.Dictionary<int, Models.Пользователь> к 'системе.Коллекции.Generic.Dictionary<int, object>.

Что я уже пробовал:

Я попробовал следующий бросок:

(Словарь<int, Объект>)(пользователи)

но безуспешно. Я искал помощь в google и stackoverflow, но не нашел подобной проблемы. Итак, не могли бы вы сказать мне, можно ли привести переменную типа: Dictionary<int, Models.User> to Dictionary<int, object> И если ответ да, то как это сделать? Спасибо.

2 Ответов

Рейтинг:
14

F-ES Sitecore

Использование дженериков

public void UpdateEntriesFromAGivenTable<T>(Dictionary<int, T> dictionary, string tableName)
{
    foreach (KeyValuePair<int, T> entry in dictionary)
    {
        Dictionary<string, object> dict = GetTypeNamesAndValuesWithReflection(entry.Value);

        foreach (var item in dict)
        {
            if (item.Value != null && (!string.Equals(item.Key, "id")))
            {
                UpdateEntry(tableName, item.Key, item.Value, entry.Key);
            }
        }
    }
}


Вы можете назвать это так

Dictionary<int, User> d = new Dictionary<int, User>();

d.Add(1, new User { Name = "A" });
d.Add(2, new User { Name = "B" });

UpdateEntriesFromAGivenTable(d, "");


Member 13992723

Спасибо, я проверил ваше решение, и оно работает.