我有一堂课:

 public class Test1
 {
     public void assignData(List<CustomClass> customData, string targetFieldName)
     {
         for(int i=0; i<customData.Count; i++)
         {
             if(customData[i].targetFieldName)
             {
                 customData[i].targetFieldName = newValue;
             }
         }
     }
 }

 List<customClass1> list1;
 List<customClass2> list2;


customClass1和customClass2完全不同,但是它们共享相同的字段“ dateAdded”。我希望能够调用Test1.assignData(list1,“ dateAdded”)和Test1.assignData(list2,“ dateAdded”)。并且list1和list2将被更新。我怎样才能做到这一点?谢谢!

最佳答案

做到这一点的最佳方法是拥有一个都实现的公共接口,该接口将dateAdded字段公开为一个属性。

interface ICustomClass {
  DateTime dateAdded { get; set; }
}


然后两个类都可以实现该接口,并且您可以更改功能以使用该接口

public void assignData(IEnumerable<ICustomClass> enumerable) {
  foreach (var customData in enumerable) {
    customData.dateAdded = newValue;
  }
}


编辑
OP在评论中表示,他们希望将此更新更新到任何列表,而与界面无关。在这种情况下,最好的做法可能是使用dynamic

public void assignData(IEnumerable<object> enumerable) {
  foreach (dynamic customData in enumerable) {
    try {
      customData.dateAdded = newValue;
    } catch {
      // Object doesn't have dateAdded so just move on
    }
  }
}

10-08 19:52