gpt4 book ai didi

C# foreach 在一个接口(interface)的集合上

转载 作者:太空宇宙 更新时间:2023-11-03 17:22:05 29 4
gpt4 key购买 nike

我想知道 C#/LINQ 是否内置了任何功能来简化以下操作:

foreach(var item in collection)
{
if (item.GetType() == typeof(Type1)
DoType1(item as Type1);
else if (item.GetType() == typeof(Type2))
DoType2(item as Type2);
...
}

类似于以下内容:

collection.ForEachType(Type1 item => DoType1(item), Type2 item => DoType2(item));

我意识到以下内容很接近:

collection.OfType<Type1>.ToList().Foreach(item => DoType1(item));
collection.OfType<Type2>.ToList().Foreach(item => DoType2(item));

但是当代码依赖于集合的顺序时它不起作用。

最佳答案

我首先要看的是多态性;我可以改用虚拟方法和 item.DoSomething() 吗?

接下来我要看的是枚举鉴别器,即

switch(item.ItemType) {
case ItemType.Foo: ...
case ItemType.Bar: ...
}

(并将鉴别器添加到公共(public)接口(interface)/基类)

如果类型可以是任何,那么 4.0 有一个技巧;如果您为每个重载调用相同的方法,您可以让 dynamic 担心选择它:

dynamic x = item;
DoSomething(x);

关于C# foreach 在一个接口(interface)的集合上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7601376/

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