如何在列表中设置通用对象的属性?

时间:2015-01-29 12:50:33

标签: c# generics

我的班级结构如下:

 public interface IStationProperty
   {
      int Id { get; set; }
      string Desc { get; set; }
      object Value { get;  }
      Type ValueType { get; }
   }

   [Serializable]
   public class StationProp<T> : IStationProperty
   {
      public StationProp()
      {
      }

      public StationProp(int id, T val, string desc = "")
      {
         Id = id;
         Desc = desc;
         Value = val;
      }

      public int Id { get; set; }
      public string Desc { get; set; }
      public T Value { get; set; }

      object IStationProperty.Value
      {
         get { return Value; }
      }

      public Type ValueType
      {
         get { return typeof(T); }
      }
   }

这允许我将多个泛型类型添加到同一个列表中,如下所示:

var props = new List<IStationProperty>();
 props.Add(new StationProp<int>(50, -1, "Blah"));
 props.Add(new StationProp<bool>(53, true, "Blah"));
 props.Add(new StationProp<int>(54, 10, "Blah"));

我现在想要做的是只更改此列表中项目的值,而不更改类型。

这可能吗?

1 个答案:

答案 0 :(得分:2)

我假设您知道要更改的项目的索引,并且您知道它的类型。然后它就像下面的

(props[0] as StationProp<int>).Value = 5;

如果您不确定其类型

var item = props[i] as StationProp<int>;
if (item != null)
{
    item.Value = 5;
}

这是否回答了你的问题?我不太确定你还想做什么。