private dynamic ConvertElements(SilverDictionary res) { List<dynamic> keysToRemove = new List<object>(); keysToRemove.AddRange(res.Keys.OfType<SilverString>()); keysToRemove.ForEach(o => { string s = o; var val = res[o]; res.Remove(o); res[s] = val; }); keysToRemove.Clear(); keysToRemove.AddRange( res.Keys.Where( key => res[key] is SilverString || res[key] is SilverNumber || res[key] is SilverArray || res[key] is SilverDictionary)); keysToRemove.ForEach(o => { if (res[o] is SilverString) { string s = res[o]; res[o] = s; } else if (res[o] is SilverNumber) { res[o] = SilverNumber.Convert(res[o]); } else if (res[o] is SilverArray) { res[o] = ConvertElements((SilverArray) res[o]); } else if (res[o] is SilverDictionary) { res[o] = ConvertElements((SilverDictionary) res[o]); } }); return res; }
public void TestCommandSingleHash() { var expect = new SilverDictionary(new Dictionary<object, object> {{"hello", "world"}}); dynamic real = CompileAndExecute("def func(h) { return h; }; func 'hello' => 'world';"); Assert.That(real, Is.EqualTo(expect)); }