使用linq替换key处的字典值

Nyr*_*yra 0 c# dictionary

编辑:我不觉得这是重复的 - 我没有清楚地说明我想知道一种有效的方法来填充字典值左边的字符.我标记为答案的问题应该澄清,因为它是一个非常不同的答案,而不是其他主题的答案.对不起,我措辞错了.

我试图验证我的词典中的所有值都是一定的长度,如果不是,请在左侧填充"0".我知道"问题是什么",我正在阅读字典的KVP,然后修改它当然会引发异常,但我不知道如何修改我的代码使其"合法"

class prefixMe
{
    Dictionary<string, string> d = new Dictionary<string, string>();

    public prefixMe()
    {
        d.Add("one", "123456");
        d.Add("two", "678");
        d.Add("three", "13");

        foreach(KeyValuePair<string,string> k in d)
        {
            StringBuilder sb = new StringBuilder(k.Value);
            while(sb.Length != 10)
            {
                Console.WriteLine("Key:{0}\tValue:{1}", k.Key, sb);
                sb.Insert(0, '0');
            }
            d[k.Key] = sb.ToString();
            //k.Value.Replace(k.Value, sb.ToString());// = sb.ToString();
            Console.WriteLine("Key:{0}\tNew Value:{1}", k.Key, d[k.Key]);
            break;
        }

    }
}
Run Code Online (Sandbox Code Playgroud)

休息; 停止代码抛出错误,但也使得它不会通过其他值,因为它突破了foreach循环.

结果应该是:

0000123456
0000000678
0000000013
Run Code Online (Sandbox Code Playgroud)

Maa*_*ten 6

使用

foreach(KeyValuePair<string,string> k in d.ToList())
Run Code Online (Sandbox Code Playgroud)

代替

foreach(KeyValuePair<string,string> k in d)
Run Code Online (Sandbox Code Playgroud)

这将创建一个键值对列表,然后通过该列表进行迭代.这意味着在循环中您可以触摸字典.

如果您不介意创建新词典,那么您也可以使用Linq轻松替换词典.

d = d.ToDictionary(x => x.Key, x => x.Value.PadLeft(10, '0'));
Run Code Online (Sandbox Code Playgroud)