C#属性数组符号 [英] C# properties as array notation

查看:127
本文介绍了C#属性数组符号的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

使用JavaScript有可能使用点符号或数组符号来访问对象。

  VAR myArray的= {E1:elem1,E2:elem2时,E3:elem3E4elem4};
VAR VAL1 = myArray的[E1];
VAR将val2 = myArray.e1;

是否有可能做到这一点使用C#?

这是我尝试:

 的[AcceptVerbs(HttpVerbs.Post)
公众的ActionResult编辑(INT ID,的FormCollection frmVals)
{
  字符串值;
  所有者所有者=新主人();  的foreach(在frmVals.AllKeys VAR键)
  {
    值= frmVals [关键]
    主[关键] =价值;
  }
}


解决方案

虽然没有办法用C#正好做到这一点。你可以改变你code以下几种方式可以实现你的目标。首先,你可以使用一个字典是这样的:

  VAR东西=新词典<字符串对象>(){
    {财产,价值},
    {property1,1}
};
的foreach(在一些VAR KEYVAL){
    VAR财产= keyVal.Key;
    VAR为PropertyValue = keyVal.Value;
}

另一种选择是动态地做到这一点:

 动态somethingDyn =新System.Dynamic.ExpandoObject();
somethingDyn.property =值;
somethingDyn.property1 = 1;VAR somethingDynDict =(IDictionary的<字符串对象>)somethingDyn;
VAR propValue = somethingDyn [属性];的foreach(在somethingDynDict VAR KEYVAL){
    VAR财产= keyVal.Key;
    VAR为PropertyValue = keyVal.Value;
}

如果您需要通过性能强类型的对象,您可以使用反射到迭代:

  VAR所有者=新Metis.Domain.User();
。变种属性= owner.GetType()的GetProperties();
的foreach(在性能VAR道具){
    对象值= prop.GetValue(所有者,NULL);
}

Using JavaScript it's possible to access an object using the dot notation or array notation.

var myArray = {e1:"elem1",e2:"elem2",e3:"elem3",e4:"elem4"};
var val1 = myArray["e1"];
var val2 = myArray.e1;

Is it possible to accomplish this using C#?

This is what I have attempted:

[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;  
  }
}

解决方案

While there is no way to do this exactly with C#. You could change your code in several ways that may accomplish your goal. First, you could use a Dictionary like this:

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

Another option would be to do it dynamically:

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;
}

If you need to iterate through properties on a strongly typed object you could use reflection:

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

这篇关于C#属性数组符号的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆