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;
        }
Esempio n. 2
0
 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));
 }