日期:2014-05-18  浏览次数:21320 次

求助:C# Dictionary<string,object>遇到的问题。
异常描述:

System.ArgumentNullException: Value cannot be null.
Parameter name: key
  at System.ThrowHelper.ThrowArgumentNullException(ExceptionArgument argument)
  at System.Collections.Generic.Dictionary`2.FindEntry(TKey key)
  at System.Collections.Generic.Dictionary`2.ContainsKey(TKey key)

C# code

        public static void CloneKeyTo(ASObject sourceASO, out ASObject desASO)
        {
            desASO = new ASObject();

            string[] keys;
            lock (sourceASO.Keys)
            {
                keys = sourceASO.Keys.ToArray();
            }
            foreach (string key in keys)
            {
                lock (sourceASO)
                {
                    if (sourceASO.ContainsKey(key))//这里出异常,说key==null
                    {
                        desASO[key] = sourceASO[key];
                    }
                }
            }
        }



测试代码:

C# code
Dictionary<string,object> demoObj = new Dictionary<string,object>();
demoObj[null]=1;//这是更加不可能的,直接异常。



我想问一下:什么情况下,Dictionary<string,object>中,的Keys的元素,中,会有子元素,有可能为:null的情况?

而这个Keys是只读的属性。

------解决方案--------------------
foreach (string key in keys)
{
lock (sourceASO)
{
string strKey=key;
if (strKey==null)
{ strKey="";
}
if (sourceASO.ContainsKey(strKey))//这里出异常,说key==null
{
desASO[strKey] = sourceASO[strKey];
}
}
}