gpt4 book ai didi

c# - 强类型化泛型函数的返回值的合适方法是什么?

转载 作者:太空狗 更新时间:2023-10-29 22:13:21 25 4
gpt4 key购买 nike

我正在编写一个过滤器函数来返回从更大的父类(super class)型集合(例如对象)中指定的特定类型。我的想法是我给你一个可枚举的,你返回给我所有的字符串。你可以这样写而无需泛型:

public static IEnumerable Filter(IEnumerable source, Type type)
{
List<object> results = new List<object>();

foreach(object o in source)
{
if(o != null && o.GetType() == type)
{
results.Add(o);
}
}

return results;
}

如果我们想返回泛型,有几种不同的方法。

作为直端口:

public static IEnumerable<TResult> Filter<TResult>
(IEnumerable source, Type type)

传入一个“例子”:

IEnumerable<TResult> Filter<TResult>
(IEnumerable source, TResult resultType)

最终我认为最干净的是:

public static IEnumerable<T> Filter<T>(IEnumerable source)

第二种类型将完全使用参数调用(并推断类型):

Filter(myList, "exampleString");

作为最终版本,将使用类型说明符调用:

Filter<string>(myList);

在签名中不自动隐含返回类型的情况下,对泛型函数的返回进行强类型化的合适方法是什么? (为什么?)

(编辑注意:我们的输入不是类型化的,例如 IEnumerable 。充其量它是 IEnumerable。此函数从其他类型的整个集合中返回 Ts。)

最佳答案

Linq 中包含的以下扩展方法完全可以满足您的需求:

IEnumerable<T> OfType<T>(this IEnumerable enumerable);

这是一个用法示例:

List<object> objects = //...

foreach(string str in objects.OfType<string>())
{
//...
}

如您所见,他们使用泛型参数作为返回类型说明符。这比使用类型或字符串并返回非类型安全枚举更简单、更安全。

关于c# - 强类型化泛型函数的返回值的合适方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/612592/

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