1)StreamReader无法取得正确取得当前位置的问题。
这个问题网上看到有人提了,参见:StreamReader缓冲引起BaseStream.Position不能反映当前Read位置的问题。不过它给出的解决方案不太认同。我的文件有几十兆,不想全部读入内存。如果考虑用Stream/BufferedStream,这样就得自己写ReadLine等函数,也不是好招。
2)C#中似乎只有map(即Dictionary),貌似没multi_map?可怜我偏偏要用到这个数据结构。
目前我老老实实用Dictionary模拟了一个MultiDictionary。大体如下:
class
MultiDictionary
<
TKey, TValue
>
: Dictionary
<
TKey, List
<
TValue
>>
{
public void Add(TKey key, TValue value)
{
List < TValue > list;
if ( base .TryGetValue(key, out list))
{
list.Add(value);
}
else
{
list = new List < TValue > ();
list.Add(value);
base .Add(key, list);
}
}
...
}
{
public void Add(TKey key, TValue value)
{
List < TValue > list;
if ( base .TryGetValue(key, out list))
{
list.Add(value);
}
else
{
list = new List < TValue > ();
list.Add(value);
base .Add(key, list);
}
}
...
}
以上两个问题很希望是我孤陋寡闻,欢迎高手支个招。
本文探讨了C#编程中遇到的两大难题:使用StreamReader时遇到的缓冲问题及如何在C#中实现类似C++中multi_map的功能。对于第一个问题,文中讨论了如何避免因缓冲而导致的BaseStream.Position显示不准确的情况;对于第二个问题,则提供了一种利用Dictionary来模拟multi_map的方法。
5万+

被折叠的 条评论
为什么被折叠?



