C# 如何缩短列表<;列表<;KeyValuePair<;字符串,字符串>&燃气轮机>;?

C# 如何缩短列表<;列表<;KeyValuePair<;字符串,字符串>&燃气轮机>;?,c#,list,types,collections,generics,C#,List,Types,Collections,Generics,我想在轻量级结构中存储一个键值对列表列表。这似乎太麻烦了。什么更好?列表会增加很多开销吗?还有其他可用选项吗?字典和列表都可以,这取决于您想要传递的数据。此外,如果您打算在所有地方使用相同的长类型,您可以在其他地方为速记定义该类型。大概是这样的: public class MyShorthand : List<List<KeyValuePair<string, string>>> { } using MyShorthand = System.Collecti

我想在轻量级结构中存储一个键值对列表列表。这似乎太麻烦了。什么更好?列表会增加很多开销吗?还有其他可用选项吗?

字典和列表>都可以,这取决于您想要传递的数据。此外,如果您打算在所有地方使用相同的长类型,您可以在其他地方为速记定义该类型。大概是这样的:

public class MyShorthand : List<List<KeyValuePair<string, string>>> { }
using MyShorthand = System.Collections.Generic.List<System.Collections.Generic.List<System.Collections.Generic.KeyValuePair<string, string>>>;
公共类MyShorthand:List{}
也可以使用using语句定义类型别名,如下所示:

public class MyShorthand : List<List<KeyValuePair<string, string>>> { }
using MyShorthand = System.Collections.Generic.List<System.Collections.Generic.List<System.Collections.Generic.KeyValuePair<string, string>>>;
使用MyShorthand=System.Collections.Generic.List;

如果要通过键访问值,请使用字典,这就是它的用途。为了减少字典的开销,请尝试为它们提供初始容量

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

公共类MyDictionary
{
私有字典值;
公共MyDictionary()
{
值=新字典();
}
public void Add(int索引、字符串键、字符串值)
{
int hash=((0xFFFF)和索引)*(0xFFFF)+(0xFFFF)和key.GetHashCode();
添加(散列,值);
}
公共字符串Get(int索引、字符串键)
{
int hash=((0xFFFF)和索引)*(0xFFFF)+(0xFFFF)和key.GetHashCode();
返回值[散列];
}
}

列表
字典
都非常有效,所以我不会再三考虑使用它们。(除非你打算在你的列表中存储大量字典,但这并不常见。)

如果您认为
列表
太多而无法键入,您可以在序言中说

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

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

为了清楚起见,我将把您的
KeyValuePair
包装成一个更短的名称,例如
StringPair
,并为
StringPair
列表定义一个缩写。这将缩短您的语法并有助于IMHO的可读性

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

public class StringPairList : List<stringPair> { }

..


var jaggedList = new List<StringPairList>();
公共类StringPair:KeyValuePair{}
公共类StringPairList:列表{}
..
var jaggedList=新列表();

考虑使用别名进行速记:

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

    public class Sample
    {
        void Foo()
        {
            var list = new MyList();
        }
    }
}
命名空间应用程序
{
使用MyList=List;
公共类样本
{
void Foo()
{
var list=new MyList();
}
}
}

推荐的别名类型方法如下:
使用MyShorthand=List
@Noldorin:特别是因为这样可以避免
密封的
类型的问题-在这种情况下不是问题,但是…我不知道你可以用using语句添加类型别名,谢谢@b个人:真的。您并没有真正添加功能,因此也没有继承功能的理由。您进行优化的目的是什么?该结构将如何使用?标题听起来像是在优化类型声明中的字符数;)是的,我只是想让它看起来不那么麻烦:)显然,这不是完全正确的,别名不能叠加在别名上,因此您必须使用以下代码:使用LoDSS=System.Collections.Generic.List;有趣的。。。我的需要太多了。我不知道,但这帮了我很大的忙。谢谢。KeyValuePair是一个密封类。。你不能从中得出结论。