2013-11-28 4 views
4

Я работаю над программой, в которой мне нужно создать словарь, в котором я передам строку и список во время выполнения, и он должен создать словарь, используя этот string как свойство ключа.Как сделать словарь списка с помощью динамического ключа в C#

ниже класс:

public class Tour 
{ 
    public int Id{get;set;} 
    public string Name{get;set;} 
    public string City{get;set;} 
} 

здесь функция

public Dictionary<int,object> GetDictionary(string KeyName, List<object>) 
{ 

} 

у меня есть идея, что это может быть сделано с помощью отражения, но я не знаю, как сделать это

+0

Вы передаете ему список туров? –

+0

Я предполагаю, что OP ожидает, что сможет называть его «GetDictionary (« Id », listOfTour)» .. – user2864740

+0

Вы хотите создать словарь с объектом Id of Tour в списке и указать мне, какой объект вы отправите это тур или нет. – VDN

ответ

0

я получил решение, спасибо за помощь :)

это желаемый код

public class Tour 
{ 
    public int Id{get;set;} 
    public string Name{get;set;} 
    public string City{get;set;} 
} 

public Dictionary<int,object> GetDictionary(string KeyName, List<object> list) 
{ 
    var dictionary = Dictionary<int,object>(); 
    foreach(var obj in list> 
    { 
     dictionary.Add(GetPropValue(obj,KeyName); 
    } 
    return dictionary; 
} 

public object GetPropValue(object src, string propName) 
{ 
    return src.GetType().GetProperty(propName).GetValue(src, null); 
} 
1

Предполагая, что у вас есть List<Tour> с переменной tours, вы можете получить Dictionary<int, Tour> следующим образом:

var dictionary = tours.ToDictionary(k => k.Id); 

Ссылка
Enumerable.ToDictionary<TSource, TKey> Method

+0

i я делаю общую функцию, поэтому я не знаю тип и даже не знаю названия ключа, – rajansoft1

+0

Это не имеет значения. Вы можете заменить любой тип, который вы хотите на 'Tour', но вам нужно указать какое-либо поле из вашего объекта в качестве ключа в выражении лямбда. –

+0

Если даже это общий тип, почему вы отправляете ключ как строку. Вы хотите найти ключ и вернуть то же ключевое значение Dictonary . почему ** строка KeyName ** вы упомянули ... – VDN

0

Используя следующее, чтобы вернуть значение тип внутри объекта

public static int GetPropValue(object src, string propName) 
{ 
    return (int)src.GetType().GetProperty(propName).GetValue(src, null); 
} 

Затем просто выделите каждый элемент и получите ключевое значение и используйте ToDictionary и в выражении lamda вызовите эту функцию.

public Dictionary<int, object> GetDictionary(string KeyName, List<object> list) 
{ 
    return list.ToDictionary(v => GetPropValue(v, KeyName)); 
} 
Смежные вопросы