Воспроизведение словаря из IEnumerable <KeyValuePair >

У меня есть метод, который возвращает IEnumerable<KeyValuePair> , но некоторые из вызывающих пользователей требуют, чтобы этот метод был словарем. Как преобразовать IEnumerable<KeyValuePair> в Dictionary чтобы я мог использовать TryGetValue ?

метод:

 public IEnumerable<KeyValuePair> GetComponents() { // ... yield return new KeyValuePair(t.Name, controlInformation); } 

вызывающий:

 Dictionary actual = target.GetComponents(); actual.ContainsKey("something"); 

Если вы используете .NET 3.5 или .NET 4, легко создать словарь с помощью LINQ:

 Dictionary result = target.GetComponents() .ToDictionary(x => x.Key, x => x.Value); 

Нет такой вещи, как IEnumerable но KeyValuePair в порядке.

Создание объекта Dictionary из Datable с помощью IEnumerable

 using System.Data; using .. public class SomeClass { //define other properties // ... public Dictionary ConvertToDictionaryFromDataTable(DataTable myTable, string keyColumnName) { // define IEnumerable having one argument of KeyValuePair IEnumerable> tableEnumerator = myTable.AsEnumerable().Select(row => { // return key value pair return new KeyValuePair(row[keyColumnName].ToString(), new User { UserID=row["userId"].ToString(), Username=row["userName"].ToString(), Email=row["email"].ToString(), RoleName=row["roleName"].ToString(), LastActivityDate=Convert.ToDateTime(row["lastActivityDate"]), CreateDate=Convert.ToDateTime(row["createDate"]), LastLoginDate=Convert.ToDateTime(row["lastLoginDate"]), IsActive=Convert.ToBoolean(row["isActive"]), IsLockedOut=Convert.ToBoolean(row["isLockedOut"]), IsApproved=Convert.ToBoolean(row["isApproved"]) }); }); return tableEnumerator.ToDictionary(x => x.Key, x => x.Value); } } public class User { public string UserID { get; set; } public string Username { get; set; } public string Email { get; set; } public string RoleName { get; set; } public DateTime LastActivityDate { get; set; } public DateTime CreateDate { get; set; } public DateTime LastLoginDate { get; set; } public bool IsActive { get; set; } public bool IsLockedOut { get; set; } public bool IsApproved { get; set; } // Other methods to follow.. } IEnumerable> ieUsers = membershipUsers.AsEnumerable().Select(row => { return new KeyValuePair(row.UserName.ToString(), new User { Username = row.UserName.ToString(), Email = row.Email.ToString() }); }); allMembershipUsers = ieUsers.ToDictionary(x => x.Key, x => x.Value); return allMembershipUsers; } } 
  • Есть ли общеansible словарь для чтения, ansible в .NET?
  • Рекурсивно обращаться к dict через атрибуты, а также доступ к индексу?
  • Что более эффективно: Словарь TryGetValue или ContainsKey + Item?
  • Словарь Swift - ключ к значению
  • Регулярное выражение, которое никогда не будет соответствовать чему-либо
  • hash-функция для строки
  • Как я могу инициализировать статическую карту?
  • Кортежи (или массивы) в качестве словарных ключей в C #
  • Использование поля объекта в качестве общего ключа словаря
  • Многозначный словарь?
  • Hashtable с многомерным ключом в C #
  • Давайте будем гением компьютера.