将通用对象数组转换为两种类型

Jam*_*xon 2 c# casting

我有一个接收Object []然后对该数组执行操作的方法.

起初我传递的是这个数组,IEnumerable<T>但是T可以是两种不同的类型.

T将始终具有相同的属性,甚至认为它们是不同的类型.

是否可以在运行时转换为aa类型,以便我可以使用我知道每个将包含的属性?

那么在哪里可以做到:

var dataObject = (IEnumerable<T>) dataArray;
Run Code Online (Sandbox Code Playgroud)

是否有可能做到:

var dataObject = (dataArray.GetType()) dataArray;
Run Code Online (Sandbox Code Playgroud)

Luk*_*keH 5

你能修改这两种T类型的源代码吗?如果是这样,那么你可以使它们(a)继承公共基类或(b)实现公共接口.

编辑以下评论......

为了适应ID属性的不同类型,您可以使用显式接口实现.这将允许您将第二个对象的ID公开为Int64通过公共接口访问时.(Int32当不通过接口访问时,ID属性仍可访问.)

不幸的是,显式接口实现将需要对原始类型进行更多更改.

void YourMethod(IEnumerable<ICommonToBothTypes> sequence)
{
    foreach (var item in sequence)
    {
        Console.WriteLine(item.ID);
    }
}

// ...

public interface ICommonToBothTypes
{
    long ID { get; }
}

public class FirstType : ICommonToBothTypes
{
    public long ID
    {
        get { return long.MaxValue; }
    }
}

public class SecondType : ICommonToBothTypes
{
    // the real Int32 ID
    public int ID
    {
        get { return int.MaxValue; }
    }

    // explicit interface implementation to expose ID as an Int64
    long ICommonToBothTypes.ID
    {
        get { return (long)ID; }
    }
}
Run Code Online (Sandbox Code Playgroud)