我有以下内容:
private Dictionary<string, Dictionary<string, File>> listFiles = new Dictionary<string,Dictionary<string,File>>();
如何在字典中添加项目?有没有更好的方法来做这样的事情? 信息:它存储源文件名,目标文件名和文件本身。
Edit1:刚想通了,我要存储的只有3个值,其中外部字典的第二个对象存储一个字典对象,这实际上不是最好的方法,因为它总是包含只有一个KeyValuePair。
Edit2:使用File我的意思是二进制数据。
Edit3:我有一个未排序的文件列表,我需要排序,然后发送到其他地方。
答案 0 :(得分:2)
您可以编写包装类Dictionary<TKey1, TKey2, TValue> : Dictionary<TKey1, Dictionary<TKey2, TValue>>
答案 1 :(得分:2)
你可以使用
Dictionary<string, KeyValuePair<string, File>>
希望这有帮助!!!
答案 2 :(得分:0)
要添加新文件,您需要执行以下操作:
listFiles[srcFile] = new Dictionary<string, File>();
listFiles[srcFile][destFile] = file;
请注意,这将覆盖现有源文件中的任何映射。然而,你真正想要的是来自(来源)的地图 - &gt; (dest,File),所以在这种情况下,我会创建一个包含目标文件名和文件的类,然后创建一个包含此查找的字典:
public class DestinationFileInfo { ... }
然后创建一个Dictionary<string, DestinationFileInfo>
答案 3 :(得分:0)
我在一个名为DoubleKeyDictionary的课程中做过一次。我需要字典对象的功能,但我有2个键。如果您确保数据锁定非常严格,您可以尝试添加数据,例如从#1号键中取出一个字符串,添加一个〜或一些分隔符,然后添加字符串#2,如blue~large,这将为您提供唯一的键。同样,这对字符串更有效,并且需要你将数据锁定,这样你的字符串中的〜就不会影响整个字符串。
所以我最初做的是你做的:Dictionary&gt;,但语法有点笨拙。因此虽然它没有明确回答你的问题,但这是我的解决方案:
创建一个名为MultiKeyDictionary的类,它在内部包含一个DataTable,并且有一个检索Customer对象的方法。该方法采用params object [],并使用DataTable.Select方法获取对象。这样你就可以拥有任意数量的密钥。你当然需要添加对象的方法。
答案 4 :(得分:0)
当您发现自己将一个泛型嵌套在另一个中时,请考虑创建一个类。例如:
// todo: give this a name that better describes its purpose
public class FileContainer
{
string DestinationFileName { get; set; }
File File { get; set; }
}
现在,而不是这个:
Dictionary<string, KeyValuePair<string, File>>
你可以使用它:
Dictionary<string, FileContainer>