6

我有一个清单:

public class tmp
{
    public int Id;
    public string Name;
    public string LName;
    public decimal Index;
}

List<tmp> lst = GetSomeData();

我想将此列表转换为 HashTable,并且我想在扩展方法参数中指定Key和。Value例如,我可能想要Key=IdandValue=IndexKey = Id + Indexand Value = Name + LName。我怎样才能做到这一点?

4

7 回答 7

12

您可以使用ToDictionary方法:

var dic1 = list.ToDictionary(item => item.Id, 
                             item => item.Name);

var dic2 = list.ToDictionary(item => item.Id + item.Index, 
                             item => item.Name + item.LName);

您不需要使用Hashtable来自 .NET 1.1 的版本,Dictionary它更安全。

于 2013-01-24T08:11:24.250 回答
6

在 C# 4.0 中,您可以使用Dictionary<TKey, TValue>

var dict = lst.ToDictionary(x => x.Id + x.Index, x => x.Name + x.LName);

但是,如果您真的想要一个Hashtable,请将该字典作为HashTable构造函数中的参数传递...

var hashTable = new Hashtable(dict);
于 2013-01-24T08:11:11.793 回答
3

您可以使用ToDictionary扩展方法并将生成的 Dictionary 传递给Hashtable构造函数:

var result = new Hashtable(lst.ToDictionary(e=>e.Id, e=>e.Index));
于 2013-01-24T08:10:51.593 回答
1

最后是 NON-Linq 方式

    private static void Main()
    {
        List<tmp> lst = new List<tmp>();
        Dictionary<decimal, string> myDict = new Dictionary<decimal, string>();
        foreach (tmp temp in lst)
        {
            myDict.Add(temp.Id + temp.Index, string.Format("{0}{1}", temp.Name, temp.LName));
        }
        Hashtable table = new Hashtable(myDict);
    }
于 2013-01-24T08:16:09.573 回答
1

作为扩展方法,转换List<tmp>Hashtable;

public static class tmpExtensions
    {
    public static System.Collections.Hashtable ToHashTable(this List<tmp> t, bool option)
    {
        if (t.Count < 1)
            return null;

        System.Collections.Hashtable hashTable = new System.Collections.Hashtable();
        if (option)
        {
            t.ForEach(q => hashTable.Add(q.Id + q.Index,q.Name+q.LName));
        }
        else
        {
            t.ForEach(q => hashTable.Add(q.Id,q.Index));
        }
        return hashTable;
    }
}
于 2013-01-24T08:19:14.567 回答
0

您可以使用 LINQ 将列表转换为通用字典,这比原始 HashTable 好得多:

List<tmp> list = GetSomeData();
var dictionary = list.ToDictionary(entity => entity.Id);
于 2013-01-24T08:11:15.603 回答
-1

使用 ForEach。

        List<tmp> lst = GetSomeData();
        Hashtable myHashTable = new Hashtable();
        lst.ForEach((item) => myHashTable.Add(item.Id + item.Index, item.Name + item.LName));
于 2013-01-24T08:25:38.633 回答