gpt4 book ai didi

c# - Enumerable.OfType<>() 无法按预期方式使用路由集合

转载 作者:太空狗 更新时间:2023-10-29 23:40:05 27 4
gpt4 key购买 nike

我发誓这没有意义。

鉴于我有这个 HttpRouteCollection从 Web API,我根据一些自定义路由类型进行过滤,特别是 IAttributeRoute .我用 httpRoutes.OfType<IAttributeRoute>()但是循环就像没有元素一样。

需要明确的是,当这个循环被命中时,整个集合的类型都是 HttpAttributeRoute直接实现 IAttributeRoute .此外,我在常规 RouteCollection 上运行了 相同 循环.

这行不通:

foreach (IAttributeRoute route in GlobalConfiguration.Configuration.Routes.OfType<IAttributeRoute>()) {
if (!string.IsNullOrWhiteSpace(route.RouteName) && !json.ContainsKey(route.RouteName)) {
json.Add(route.RouteName, "/" + route.Url);
}
}

然而,这工作正常:

foreach (var route in GlobalConfiguration.Configuration.Routes)
{
if (route is IAttributeRoute) // uhhhh?
{
var r = route as IAttributeRoute;
if (!string.IsNullOrWhiteSpace(r.RouteName) && !json.ContainsKey(r.RouteName))
{
json.Add(r.RouteName, "/" + r.Url);
}
}
}

我发誓我没有说谎,它只适用于后面的代码。就像我说的,在正常的路线收集上这样做是可以的。正常的路由集合还有其他类型,不只是IAttributeRoute ,但是 HttpRouteCollection 只有IAttributeRoute ,在当前状态下(将来可能有不同类型的路线)。这可能是一个因素吗?

我是不是漏掉了什么OfType做我在内部做的事情?

最佳答案

我猜这是 HostedHttpRouteCollection 处理对其内部集合的引用的方式的问题。 GetEnumerator 只返回类型为 HttpWebRoute 的路由:

public override IEnumerator<IHttpRoute> GetEnumerator()
{
return (
from httpWebRoute in this._routeCollection.OfType<HttpWebRoute>()
select httpWebRoute.HttpRoute).GetEnumerator();
}

因此,虽然它使用 RouteTable.Routes 中的所有路由进行初始化,但它不会将它们全部作为 IEnumerable 返回。

在这种情况下,我想知道当您在第二个示例中说“它有效”时,这是否意味着它实际上迭代了您期望的所有项目?查看实现并运行与您发布的等效的内容,我认为它不会。

关于c# - Enumerable.OfType<>() 无法按预期方式使用路由集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14008453/

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