【问题标题】:dynamically select Ienumerable property in c#在 C# 中动态选择 Ienumerable 属性
【发布时间】:2015-11-04 22:08:02
【问题描述】:

我正在尝试执行以下断言

Assert.AreEqual<string>(A.Drivers[i].FirstName, Response);

Drivers 是 IEnumerable 集合,它具有其他属性,如 last name 、 middle name 等。我想动态选择 Drivers 的属性,以便可以用一种方法完成,而不是编写不同的每个属性的方法

【问题讨论】:

  • 什么是i?您目前是否正在循环执行此操作?如果Drivers 中的任何 项失败,或者仅当Drivers 中的所有 项失败,断言是否应该失败?
  • 嗯,你说“所以可以用一种方法完成”,但我在那里只看到一种方法。你能举一个例子来说明如果你对每个属性都有一个方法会是什么样子吗?很难理解你想做什么。
  • 你说 Drivers 是一个 IEnumerable 集合...集合是什么?所述对象的所有属性都是字符串类型的吗?
  • 这个问题其实是(我认为)。 “如何读取对象的运行时指定属性?” Javascript 允许 obj["propname"] c# 没有简单的等价物你需要按照 Dano 使用反射

标签: c# .net ienumerable


【解决方案1】:

你可以使用反射来做到这一点:

获取 Drivers 类的字符串属性

var driverProperties = typeof(Drivers).GetProperties().Where(i => i.PropertyType.Equals(typeof(string)));

然后遍历属性

foreach (var property in driverProperties)
        {
            Assert.AreEqual<string>(property.GetValue(A.Drivers[i]), Response);
        }

【讨论】:

    【解决方案2】:

    对 Dano 的建议稍作改动。获得一个特定的属性

    var prop = typeof(Drivers).GetProperty("propName");
    var val = (string)prop.GetValue(A.Drivers[i]);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-18
      • 2020-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多