C#对象强制转换为Dictionary <string,object =“”>

时间:2016-12-03 21:53:22

标签: c#

我的方法

.my-button {
    color: black;
}

.my - button {
    color: red;
 }

其中parms.ValidationObject = new { validations = new Dictionary<string, object>() { { parms.JsonObjectName, modelValidations } } }; return parms.ValidationObject; ValidationObject类型

稍后我称这个方法为

Object

但我得到

  

无法从'object'转换为'System.Collections.Generic.IEnumerable&gt;'

简单转换为var modelValidations = new Dictionary<string, object>(); var validations = GetValidations(nextParms); modelValidations = modelValidations.Concat(validations).ToDictionary(x => x.Key, x => x.Value); 不起作用。我该怎么办?

2 个答案:

答案 0 :(得分:1)

在将验证传递给System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<string, object>>之前,您需要将验证转换为Concat,因为这是它所期望的。

也可以进行此更改:

parms.ValidationObject = new Dictionary<string, object>() { parms.JsonObjectName, modelValidations };

答案 1 :(得分:1)

你不清楚,但当你说&#34;我的方法&#34;是:

parms.ValidationObject = new { validations = new Dictionary<string, object>() { { parms.JsonObjectName, modelValidations } } };
    return parms.ValidationObject;

我假设您的意思是上面的代码是方法GetValidations的实现。如果是这样,那么问题是您的方法的返回类型可能是object,因为它不能成为parms.ValidationObject真实类型,因为它是匿名类型,不能泄漏出方法。

所以我认为你真正的问题是你试图从外部方法使用匿名类型上的validations属性定义。真的,你应该退后一步,停止这样做。如果你想在声明它的方法之外使用匿名类型,那就意味着你犯了一个错误。

而是使用Tuple变量返回所需的值,使用out参数,完全定义新的具体类型,或者只返回字典(parms.ValidationObject.validations)本身 - 由于您只定义了一个属性,因此完全不清楚为什么您在此处使用匿名类型。在任何情况下,您都不应该尝试以声明类型的方法之外的静态方式与匿名类型进行交互。