C#属性为数组表示法

deD*_*ogs 5 c# arrays properties

使用JavaScript可以使用点表示法或数组表示法访问对象.

var myArray = {e1:"elem1",e2:"elem2",e3:"elem3",e4:"elem4"};
var val1 = myArray["e1"];
var val2 = myArray.e1;
Run Code Online (Sandbox Code Playgroud)

是否可以使用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;  
  }
}
Run Code Online (Sandbox Code Playgroud)

Nat*_*ten 6

虽然没有办法完全用C#做到这一点.您可以通过多种方式更改代码,从而实现目标.首先,你可以使用这样的字典:

var something = new Dictionary<string, object>() {
    { "property", "value"},
    { "property1", 1}
};
foreach (var keyVal in something) {
    var property = keyVal.Key;
    var propertyValue = keyVal.Value;
}
Run Code Online (Sandbox Code Playgroud)

另一个选择是动态地做:

dynamic somethingDyn = new System.Dynamic.ExpandoObject();
somethingDyn.property = "value";
somethingDyn.property1 = 1;

var somethingDynDict = (IDictionary<string, object>)somethingDyn;
var propValue = somethingDyn["property"];

foreach (var keyVal in somethingDynDict) {
    var property = keyVal.Key;
    var propertyValue = keyVal.Value;
}
Run Code Online (Sandbox Code Playgroud)

如果需要遍历强类型对象的属性,可以使用反射:

var owner = new Metis.Domain.User();
var properties = owner.GetType().GetProperties();
foreach (var prop in properties) {
    object value = prop.GetValue(owner, null);
}
Run Code Online (Sandbox Code Playgroud)