gpt4 book ai didi

c# - 使用多个类/接口(interface)的列表过滤

转载 作者:太空狗 更新时间:2023-10-29 22:28:00 26 4
gpt4 key购买 nike

基本上我有一个对象列表,其中每个对象可能实现一组不同的接口(interface):

List<BaseObject> objects;

class BaseObject
{
public void DoStuff();
}

interface IX
{
void DoX();
}

interface IY
{
void DoY();
}

interface IZ
{
void DoZ();
}

我想写这样的东西:

foreach(var obj in objects.OfType<BaseObject and IX>)
{
obj.DoStuff();
obj.DoX();
}

(例如,我对 BaseObject 和 IX 类型的对象执行特定算法,而不必在那里进行类型转换)

可以用 C# 做吗?什么是最优雅的解决方案?

我能做到:

foreach(var obj in objects.OfType<IX>)
{
var baseobj = (BaseObject)obj.DoStuff();
obj.DoX();
}

但是我觉得很丑。

我可能需要将特定操作应用于实现接口(interface) IX 和接口(interface) IZ 的类型。

foreach(var obj in objects.OfType<BaseType and IX and IZ>)
{
obj.DoStuff();
obj.DoX();
obj.DoZ();
}

最佳答案

一种可能的方法是使用dynamic:

foreach(var xz in objects.Where(o => o is IX && o is IZ).Select(o => (dynamic)o))
{
xz.DoStuff();
xz.DoX();
xz.DoZ();
}

当然,如果你不想使用dynamic,你仍然可以强制转换:

foreach(var xz in objects.Where(o => o is IX && o is IZ))
{
xz.DoStuff();
((IX)xz).DoX();
((IZ)xz).DoZ();
}

关于c# - 使用多个类/接口(interface)的列表过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8250482/

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