在foreach循环中获取属性的价值

时间:2015-04-23 05:03:35

标签: c# asp.net dictionary foreach

我遇到的问题是从我传入的类型viewmodel的属性中获取值。这是我当前的方法,我相信该属性的名称存储正确,但我似乎无法让价值发挥作用。任何建议将不胜感激。我相信当值的类型也不总是字符串时我会遇到字典问题,但这是后来的另一个问题:)。

以下是viewmodel类型的方法:

public Type ConvertModel(Type mytype) {
            Dictionary<string,string> dic = new Dictionary<string,string>();

            foreach (var prop in mytype.GetProperties())
            {
               dic.Add(prop.Name, prop.GetValue(mytype,null).ToString());
            }

            //return mytype;
        }

这就是调用该方法的方法(忽略方法名称,我只想尝试一个想法):

public ActionResult Index()
        {
            var viewmodel = new myViewModel()
            {
                FirstName = "Shawn",
                LastName = "Michaels"
            };

            var newType = ConvertModel(viewmodel.GetType());

            return View();
        }

示例输出是我最终会传回另一个与viewModel相关的模型(比如UserViewModel和UserModel,其中UserModel将填充UserViewModel属性和值,除了方法应该在上述任何2个相关模型中。 )

1 个答案:

答案 0 :(得分:1)

因为该属性可以为null,然后引发错误,以便您可以执行以下选项之一:

更新

只需确保传递对象的实例而不是类型:

而不是这个    public Type ConvertModel(Type mytype){

使用下面的代码

public T ConvertModel<T>(T obj) 
{
   var dic = new Dictionary<string,object>();
   foreach (var prop in obj.GetType().GetProperties())
   {
      dic.Add(prop.Name, prop.GetValue(obj,null));
   }

首先:将字典设为obejct

var dic = new Dictionary<string,object>();
foreach (var prop in obj.GetType().GetProperties())
{
    dic.Add(prop.Name, prop.GetValue(obj,null));
}

第二个:您可以转换为字符串,如果无法在字典中强制转换为

foreach (var prop in obj.GetType().GetProperties())
{
    dic.Add(prop.Name, (string)prop.GetValue(obj,null));
}

或者

foreach (var prop in mytype.GetProperties())
{
    dic.Add(prop.Name, Convert.ToString(prop.GetValue(mytype,null)));
}