gpt4 book ai didi

c# - 一旦我检查了它的类型,我可以将泛型传递给非泛型函数吗?

转载 作者:太空宇宙 更新时间:2023-11-03 20:14:40 24 4
gpt4 key购买 nike

我有一个接受类型 T 的 Enumerable 的通用方法。如果 T 也是一个 Enumerable,我需要将它传递给另一个函数。但是,由于该函数仅采用 Enumerables,并且 T 是通用的,因此无法编译。我在传递 T 之前检查它是否可枚举 - 但显然不是以解决此问题的方式。

我该怎么做?

(显然我可以编写另一种方法,它只采用 IEnumerable< IEnumerable< T>>,并在相关的地方使用它,但这似乎不够优雅。)

例子:

public static bool EnumerablesAreEqual<T>(IEnumerable<T> a, IEnumerable<T> b)
{
foreach (T x in a)
{
if (x is Enumerable && !EnumerableContainsEnumerable(x, b))
return false;
if (!b.Contains(x))
return false;
}
...
}

我看过this post但我不认为这是同一个问题。

最佳答案

您检查变量的动态 类型这一事实不会改变它的静态 类型,也不会改变它用于检查调用的内容。

如果你想这样做,你需要类型转换。您可以使用已检查的类型转换一次性完成:

Enumerable ex = x as Enumerable;
if (ex != null && !EnumerableContainsEnumerable(ex, b))
return false;

as 运算符检查转换是否可能:如果是,它将返回转换后的对象;如果不是,它将返回 null

关于c# - 一旦我检查了它的类型,我可以将泛型传递给非泛型函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17637434/

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