更改C#动态类型的属性值
是否有任何方法可以更改动态类型属性值? 代码示例:更改C#动态类型的属性值,c#,.net,object,dynamic,propertyinfo,C#,.net,Object,Dynamic,Propertyinfo,是否有任何方法可以更改动态类型属性值? 代码示例: dynamic result = new { Status = "WARNING", Modified = false, Message = string.Empty }; result.Status = "OK"; 使用C#这可能吗? 谢谢不,这是不可能的。您将得到一个运行时错误,告诉您匿名类型的属性Status为写保护或只读 供将来使用,这里是 报告说: 匿名类型包含一个或多个公共只读属性 您需要使
dynamic result = new { Status = "WARNING", Modified = false, Message = string.Empty };
result.Status = "OK";
使用C#这可能吗?
谢谢不,这是不可能的。您将得到一个运行时错误,告诉您匿名类型的属性
Status
为写保护或只读
供将来使用,这里是
报告说:
匿名类型包含一个或多个公共只读属性
您需要使用其他属性的原始值重新创建对象:
var result = new { Status = "WARNING", Modified = false, Message = string.Empty };
result = new { Status = "OK", Modified = result.Modified, Message = result.Message };
Console.WriteLine(result.Status);
输出:
嗯
在c#4.0中增加了动态数据类型。它用于避免编译时类型检查。编译器在编译时不检查动态类型变量的类型,而是在运行时获取类型 不过,在大多数情况下,动态数据类型的行为类似于对象 在上述示例中: 您已经创建了一个类似于类类型的匿名类型变量,但它只能包含公共只读成员,因此在本例中无法更改result.Status值 要解决这个问题:
我认为你应该使用像字典这样的通用集合 代码可能如下所示:
var result = new Dictionary<string, object>() { {"Status", "Warning"}, {"Modified", false}, {"Message", string.empty} };
result ["Status"] = "Ok";
var result=new Dictionary(){{“Status”,“Warning”},{“Modified”,false},{“Message”,string.empty};
结果[“状态”]=“正常”;
为什么不试试呢?嗯,我现在不能试试,但是。您是否尝试过简单的result.Status=“something”示例?尝试过,尝试过使用PropertyInfo,但SetValue在运行时失败。NadaOK,从语法角度看,它是有效的。然后我需要使用returnjson(result)
以Json的形式返回result
。有没有办法强制转换Dictionary()以返回正确的Json?这样,它将返回key.value元组的Json数组。