MemoryStream.GetBuffer()
по сравнению с MemoryStream.ToArray()
. Бывшие возвраты целый буфер, последний просто используемая часть. Фу.
List<string> keyList = new List<string>(this.yourDictionary.Keys);
Вопрос немного сложный для понимания, но я предполагаю, что проблема в том, что вы пытаетесь удалить элементы из Словаря во время перебора ключей. Я думаю, что в этом случае у вас нет другого выбора, кроме как использовать второй массив.
ArrayList lList = new ArrayList(lDict.Keys);
foreach (object lKey in lList)
{
if (<your condition here>)
{
lDict.Remove(lKey);
}
}
Если вы можете использовать общие списки и словари вместо ArrayList, то я бы это сделал, однако приведенное выше должно работать.
Ответ Марка Гравелла должен сработать для вас. myDictionary.Keys
возвращает объект, который реализует ICollection
, IEnumerable
и их неуниверсальные аналоги.
Я просто хотел добавить что, если вы планируете также получить доступ к значению, вы можете прокручивать словарь следующим образом (измененный пример):
Dictionary<string, int> data = new Dictionary<string, int>();
data.Add("abc", 123);
data.Add("def", 456);
foreach (KeyValuePair<string, int> item in data)
{
Console.WriteLine(item.Key + ": " + item.Value);
}
Вы сможете просто посмотреть на .Keys
:
Dictionary<string, int> data = new Dictionary<string, int>();
data.Add("abc", 123);
data.Add("def", 456);
foreach (string key in data.Keys)
{
Console.WriteLine(key);
}
Или вот так:
List< KeyValuePair< string, int > > theList =
new List< KeyValuePair< string,int > >(this.yourDictionary);
for ( int i = 0; i < theList.Count; i++)
{
// the key
Console.WriteLine(theList[i].Key);
}