que leer imprimir example diccionario consultar c# collections dictionary ienumerable idictionary

c# - leer - Recreando un diccionario desde un IEnumerable<KeyValuePair<>>



que es un dictionary en c# (2)

Tengo un método que devuelve un IEnumerable<KeyValuePair<string, ArrayList>> , pero algunas de las personas que llaman requieren que el resultado del método sea un diccionario. ¿Cómo puedo convertir IEnumerable<KeyValuePair<string, ArrayList>> en un Dictionary<string, ArrayList> para poder usar TryGetValue ?

método:

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

llamador:

Dictionary<string, ArrayList> actual = target.GetComponents(); actual.ContainsKey("something");


Crear un objeto de diccionario de Datable usando IEnumerable

using System.Data; using .. public class SomeClass { //define other properties // ... public Dictionary<string, User> ConvertToDictionaryFromDataTable(DataTable myTable, string keyColumnName) { // define IEnumerable having one argument of KeyValuePair IEnumerable<KeyValuePair<string,User>> tableEnumerator = myTable.AsEnumerable().Select(row => { // return key value pair return new KeyValuePair<string,User>(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<KeyValuePair<string,User>> ieUsers = membershipUsers.AsEnumerable().Select(row => { return new KeyValuePair<string,User>(row.UserName.ToString(), new User { Username = row.UserName.ToString(), Email = row.Email.ToString() }); }); allMembershipUsers = ieUsers.ToDictionary(x => x.Key, x => x.Value); return allMembershipUsers; } }


Si está utilizando .NET 3.5 o .NET 4, es fácil crear el diccionario utilizando LINQ:

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

No existe un IEnumerable<T1, T2> pero un KeyValuePair<TKey, TValue> está bien.