我想编写一个通用函数,以遍历具有一个公共字段的多个不同对象。我想在所有对象上更改此字段。
但是,我需要通用函数中每个对象的类型。
我的代码如下:
UpdateObjects<objectType>(IMyCollection collection) {
foreach (objectType obj in collection)
{
var correctlyTypedObject = (objectType)obj.MakeEditable();
// Do stuff with correctlyTypedObject
}
}
MakeEditable()会更改obj的类型,因此我需要将其回退。
有没有办法做到这一点?
我按如下方式调用该函数:
UpdateObjects<userObject>(collection);
由于我使用类型userObject
调用函数,因此我认为您可以使用该类型在函数本身中强制转换对象。这个假设正确吗?
答案 0 :(得分:1)
我不知道我是否完全了解您的问题,但是在我看来,您正在寻找dynamic所提供的服务。
假定三个类A,B,C
都具有属性P
。
class A { public int P { get; set; } }
class B { public int P { get; set; } }
class C { public int P { get; set; } }
然后一个函数可能看起来像这样:
private void UpdateObjects(dynamic[] collection)
{
int newValue = 123456;
foreach (dynamic obj in collection)
{
obj.P = newValue;
}
}
可以这样使用:
dynamic[] collection = new dynamic[] {new A(), new B(), new C()};
UpdateObjects(collection);
// Result
foreach (dynamic o in collection)
{
int p = o.P;
Debug.WriteLine(p);
}