有没有一种方法可以转换为泛型函数中传递的类型?

时间:2019-12-11 11:47:36

标签: c# .net generics casting

我想编写一个通用函数,以遍历具有一个公共字段的多个不同对象。我想在所有对象上更改此字段。

但是,我需要通用函数中每个对象的类型。

我的代码如下:

UpdateObjects<objectType>(IMyCollection collection) {
    foreach (objectType obj in collection)
    {
        var correctlyTypedObject = (objectType)obj.MakeEditable();
        // Do stuff with correctlyTypedObject
    }
}

MakeEditable()会更改obj的类型,因此我需要将其回退。

有没有办法做到这一点?

我按如下方式调用该函数: UpdateObjects<userObject>(collection);

由于我使用类型userObject调用函数,因此我认为您可以使用该类型在函数本身中强制转换对象。这个假设正确吗?

1 个答案:

答案 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);
}