gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 19:34:21 25 4
gpt4 key购买 nike

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

起初我将这个数组作为 IEnumerable<T> 传入但是 T 可以是两种不同的类型。

T 将始终具有相同的属性,即使它们是不同的类型也是如此。

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

所以在可能的情况下:

var dataObject = (IEnumerable<T>) dataArray;

是否有可能做到:

var dataObject = (dataArray.GetType()) dataArray;

最佳答案

你能修改这两个T类型的源代码吗?如果是这样,那么您可以让它们都(a) 继承自一个公共(public)基类,或者(b) 实现一个公共(public)接口(interface)。

编辑以下评论...

要适应 ID 属性的不同类型,您可以使用 explicit interface implementation .这将允许您在通过公共(public)接口(interface)访问时将第二个对象的 ID 公开为 Int64。 (当不通过接口(interface)访问时,ID 属性仍可作为 Int32 访问。)

不幸的是,显式接口(interface)实现需要对您的原始类型进行更多更改。

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; }
}
}

关于c# - 将通用对象数组转换为两种类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1702221/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com