【问题标题】:Get value from property in foreach loop从 foreach 循环中的属性获取值
【发布时间】:2015-04-23 05:03:34
【问题描述】:

我在从传入的视图模型类型的属性中获取值时遇到问题。这是我当前的方法,我相信属性的名称存储正确,但我似乎无法获得工作的价值。任何建议将不胜感激。我相信当值的类型并不总是字符串时我会遇到字典问题,但这是以后的另一个问题:)。

这里是采用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 个相关模型中。 )

【问题讨论】:

  • 您需要发布您的类型和示例输出以便于理解
  • 我使用该信息进行了编辑。

标签: c# asp.net dictionary foreach


【解决方案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));
   }

首先:将字典创建为对象

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

第二个:可以转换成字符串,如果不能转换就把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)));
}

【讨论】:

  • 我尝试了上面的答案,添加到字典时出现以下错误。 mscorlib.dll 中出现“System.Reflection.TargetException”类型的异常,但未在用户代码中处理
  • 那是一个不同的错误,而不是传递类型你应该传递实例
  • 啊哈,上面两个都是。我现在正在考虑将它作为类型以外的东西传递。
  • 只检查我的更新,获取属性值你应该传递实例对象,而不是类型
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多