gpt4 book ai didi

c# - 使重复代码通用

转载 作者:行者123 更新时间:2023-11-30 13:27:16 25 4
gpt4 key购买 nike

是否可以像这样包装重复的代码:

IList<Bla1> Bla1s = (from a in Containers
where a.Right.GetType().Name.Equals("Bla1")
select
(
(Bla1) a.Right
)).Distinct().ToList<Bla1>();

进入通用构造(方法?)。有很多 Blas(Bla1,Bla2 ...)。我想 Bla 会代表 T 但我对这种情况下的泛型没有太多经验。谢谢。

最佳答案

如果你想测试类型而不仅仅是类型名称,那么你可以这样做:

IList<T> items = Containers.Select(c => c.Right).OfType<T>().Distinct().ToList();

因此,您的泛型方法可能如下所示:

IList<T> GenericMethod<T>()
{
return Containers.Select(c => c.Right).OfType<T>().Distinct().ToList();
}

正如 hvd 在评论中提到的那样,上面的代码还将返回任何属于从 T 派生的类型的 Right 元素。如果您的目的是仅针对 T 类型进行过滤,请改用此方法:

IList<T> GenericMethod<T>(IEnumerable<Container> containers)
{
return containers.Select(c => c.Right)
.Where(x => x.GetType() == typeof(T)).Cast<T>()
.Distinct().ToList();
}

关于c# - 使重复代码通用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13159465/

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