【发布时间】:2011-01-28 17:31:02
【问题描述】:
使用 JavaScript,可以使用点表示法或数组表示法访问对象。
var myArray = {e1:"elem1",e2:"elem2",e3:"elem3",e4:"elem4"};
var val1 = myArray["e1"];
var val2 = myArray.e1;
是否有可能使用 C# 来完成?
这是我尝试过的:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(int id, FormCollection frmVals)
{
string value;
Owner owner = new Owner();
foreach (var key in frmVals.AllKeys)
{
value = frmVals[key];
owner[key] = value;
}
}
【问题讨论】:
-
为什么要使用这种表示法?
-
不要这样做。也许还有其他合法的场景,但这(一个 ASP.NET MVC 控制器操作)绝对不是其中之一。你真的真的很想验证来自网络用户的输入。不要只是将任意值填充到任意命名的属性中。这只是要求安全问题。
-
感谢您提供的有用信息。由于我是新手,我的想法是将输入值填充到强类型对象中,如果无法转换值,则会抛出异常。填充值后,如果没有例外,那么我将验证属性值的格式是否正确。在所有这些都得到验证之后,我可以将此对象传递给一个控件,并将其保存到数据库中。
-
是的,您可以在 C# 4.0 中使用 ExpandoObject 执行此操作,但您不会在成员上获得智能感知。它基本上是一个实现 IDictionary
的动态对象。 msdn.microsoft.com/en-us/library/…
标签: c# arrays properties