LINQ没有在IEnumerable上工作

时间:2013-02-20 22:55:29

标签: linq ienumerable intellisense autofac

我正在使用Autofac(我在控制台应用程序中注册了基础nuget包)并希望查看注册列表。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Autofac;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            // First, create your application-level defaults using a standard
            // ContainerBuilder, just as you are used to.
            var builder = new ContainerBuilder();
            var appContainer = builder.Build();


            appContainer.ComponentRegistry.Registrations.Where(x => true);
        }
    }
}

问题在于

appContainer.ComponentRegistry.Registrations.Where(x => true);

这里intellisense没有给我Where where linq方法,但是它确实编译到我没有任何警告,消息中的错误。

我进一步尝试了这个

   IEnumerable<string> list = new List<string>();

    list.Where(x => true);

intellisense工作正常,并给我所有标准的列表方法。

我已经从头开始在几个不同的应用程序中尝试过此操作,但我得到了同样的行为。

关于最新情况的任何想法?

编辑:

以下作品在智能感知中正确显示

IEnumerable<IComponentRegistration> test = new List<IComponentRegistration>();
            test.Where(x => true);

我正在使用

来自nuget的

<package id="Autofac" version="3.0.1" targetFramework="net45" />

并将鼠标悬停在ComponentRegistrations上 enter image description here

在这种情况下,范围定义为

  ILifetimeScope _scope;

但是,如果我直接尝试这个

,我会得到同样的结果
 var builder = new ContainerBuilder();
 var appContainer = builder.Build();
 appContainer.ComponentRegistry.Registrations.Where(x => true);

IComponentRegistry也被定义为(在Autofac中)

public interface IComponentRegistry : IDisposable
{
    ...
    IEnumerable<IComponentRegistration> Registrations { get; }
    ...
}

2 个答案:

答案 0 :(得分:0)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Autofac;

namespace ConsoleApplication2
{
  class Program
   {
    static void Main(string[] args)
    {
        // First, create your application-level defaults using a standard
        // ContainerBuilder, just as you are used to.
        var builder = new ContainerBuilder();
        var appContainer = builder.Build();


        var registrations = appContainer.ComponentRegistry.Registrations.Where(x => x.Target.Equals("test"));
    }
 }
}

尝试将linq表达式分配给变量并查看它是否有效

答案 1 :(得分:0)

复制评论以回答。

如果我理解正确,你的问题是智能感知不起作用

appContainer.ComponentRegistry.Registrations.Where(x => true); 

你应该尝试禁用你的插件,看看是否能解决它,因为它对我来说很好。既然你说你有其他人确认它,也许从你的装置有共同点的任何插件开始。