【问题标题】:How can I shorten List<List<KeyValuePair<string, string>>>?如何缩短 List<List<KeyValuePair<string, string>>>?
【发布时间】:2010-11-22 17:23:22
【问题描述】:

我想以轻量级结构存储键值对列表的列表。这似乎太麻烦了。什么更好? List> 会增加很多开销吗?还有哪些其他选择?

【问题讨论】:

  • 你在优化什么?结构将如何使用?标题听起来像是您正在优化类型声明中的字符数;)
  • 是的,我只是想让它看起来不那么麻烦:)

标签: c# list types collections generics


【解决方案1】:

考虑使用别名作为速记:

namespace Application
{
    using MyList = List<List<KeyValuePair<string, string>>>;

    public class Sample
    {
        void Foo()
        {
            var list = new MyList();
        }
    }
}

【讨论】:

  • 不知道,但这很有帮助。谢谢。
【解决方案2】:

ListDictionary 都非常有效,所以我不会三思而后行。 (除非您要在列表中存储大量字典,但这并不常见。)

如果您认为List&lt;Dictionary&lt;string, string&gt;&gt; 输入过多,可以在序言中说明

using LoDSS = System.Collections.Generic.List<System.Collections.Generic.Dictionary<string, string>>;

请注意,这只是一个别名,不需要子类化。

【讨论】:

  • 显然,这并不完全正确,别名不能叠加在别名上,因此您必须改用以下代码: using LoDSS = System.Collections.Generic.List>;
【解决方案3】:

Dictionary 和 List> 都可以,具体取决于您要传递的数据。此外,如果您要在所有地方使用相同的长类型,您可以在其他地方定义类型作为速记。像这样的:

public class MyShorthand : List<List<KeyValuePair<string, string>>> { }

或者您可以使用 using 语句来定义类型别名,如下所示:

using MyShorthand = System.Collections.Generic.List<System.Collections.Generic.List<System.Collections.Generic.KeyValuePair<string, string>>>;

【讨论】:

  • 别名类型的推荐方法如下:using MyShorthand = List&lt;List&lt;KeyValuePair&lt;string, string&gt;&gt;&gt;;
  • @Noldorin:特别是因为这避免了sealed 类型的问题 - 在这种情况下不是问题,但是......
  • 我不知道您可以使用 using 语句添加类型别名,谢谢!
  • @person-b:确实。您并没有真正添加功能,因此无论如何都没有继承功能的理由。
【解决方案4】:

如果您通过键访问值,请使用字典,这就是本意。要减少字典的开销,请尝试给它们一个初始容量。

或者(如果两个列表都相当小),您可以实现自定义散列对象,如下所示(除了更漂亮):

public class MyDictionary
{
    private Dictionary<string, string> values;

    public MyDictionary()
    {
        values = new Dictionary<string, string>();
    }

    public void Add(int index, string key, string value)
    {
        int hash = ((0xFFFF) & index) * (0xFFFF) + (0xFFFF) & key.GetHashCode();
        values.Add(hash, value);
    }
    public string Get(int index, string key)
    {
        int hash = ((0xFFFF) & index) * (0xFFFF) + (0xFFFF) & key.GetHashCode();
        return values[hash];
    }
}

【讨论】:

  • 有趣...不过我的需要太多了。
【解决方案5】:

为清楚起见,我会将您的 KeyValuePair&lt;string, string&gt; 包装成更短的内容,例如StringPair 并且还定义了 StringPair 列表的简写。这将缩短您的语法并提高可读性恕我直言。

public class StringPair : KeyValuePair<string, string> { }

public class StringPairList : List<stringPair> { }

..


var jaggedList = new List<StringPairList>();

【讨论】:

  • KeyValuePair 是一个密封的类。你不能从它派生。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-20
  • 1970-01-01
  • 1970-01-01
  • 2017-05-21
  • 1970-01-01
相关资源
最近更新 更多