2009-08-19 77 views
0

我正在写一些类,它不会编译没有“使用System.Linq”。但我不明白为什么它需要。我写的与Linq无关。我如何找出名称空间的使用位置?
而且非常糟糕写一段代码(我试图找出我想做的事情):
Error 4 Non-invocable member 'System.Collections.Generic.List<DateFilename.FailedFieldsList.FailedFields.FailedField>.Count' cannot be used like a method. D:\Slabo\My Documents\Visual Studio 2008\Projects\DateFilename\DateFilename\FailedFieldsList.cs 47 54 DateFilename如何找出是否使用某个命名空间,如果是,在哪里?

:当我不包括LINQ命名空间

using System; 
using System.Collections; 
using System.Collections.Generic; 
//using System.Linq; 
using System.Text; 

namespace DateFilename 
{ 
    public class FailedFieldsList 
    { 
    private static List<FailedFields> ErrorList = new List<FailedFields>(); 
    public void AddErrorList(FailedFields errs) 
    { 
     ErrorList.Add(errs); 
    } 
    public void addSingleFailedField(string vField, string vMessage) 
    { 
     //FailedFields 
    } 
    public List<FailedFields> GetErrorList() 
    { 
     return ErrorList; 
    } 
    public class FailedFields 
    { 
     public List<FailedField> ListOfFailedFieldsInOneRecord = new List<FailedField>(); 
     public class FailedField 
     { 
      public string fieldName; 
      public string message; 
      public FailedField(string vField, string vMessage) 
      { 
       this.fieldName = vField; 
       this.message = vMessage; 
      } 
      public override string ToString() 
      { 
       return fieldName + ", " + message; 
      } 
     } 
     public void addFailedField(FailedField f) 
     { 
      ListOfFailedFieldsInOneRecord.Add(f); 
     } 
     public int getFailedFieldsCount() 
     { 
      return ListOfFailedFieldsInOneRecord.Count(); 
     } 
    } 

    } 
} 

错误信息产生谢谢

+0

你的错误信息告诉你在哪一行发生了错误,并且还告诉你你正在调用的无效方法。 – 2009-08-19 03:10:10

回答

6

的问题是,在过去的方法:

public int getFailedFieldsCount() { 
    return ListOfFailedFieldsInOneRecord.Count(); 
} 

方法COUNT()不是List(T)的成员。财产计数,但是,是。如果你用Count代替Count(),这将编译而不需要使用System.Linq。

通过包含System.Linq,您启用了扩展方法Count(),它足够容易地完成同样的事情。

请参阅msdn上的List(T) Members了解List(T)的部分内容。

+0

感谢您的解决方案欢呼! – 2011-02-16 10:11:16

1

如何检查编译器告诉你你的错误是当你删除“using System.Linq”?

1

一个using声明从来没有“需要”,因为你总是可以参考System.Linq.Foo明确无论它是你可以引用Foo当你using的命名空间。

因此,找出命名空间的最快和最简单的方法是尝试编译程序并查看出现错误的位置。如果Foo突然没有定义,你找到了罪魁祸首!

3

您可能会使用System.Linq命名空间中包含的一些扩展方法(如Distinct,Select,Where或其他一些收集方法)。编译输出窗口应该给你一个很好的指示,在必要的使用语句应该是。

编辑:

'System.Collections.Generic.List<DateFilename.FailedFieldsList.FailedFields.FailedField>.Count cannot be used like a method. 

包含您的代码示例中字数唯一的地方是:

ListOfFailedFieldsInOneRecord.Count()getFailedFieldsCount()

计数的扩展方法在System.Linq命名空间中引入的,即通过Enumerable静态类。

Here是这个类提供给你的所有扩展方法。

0

更一般(主动)的方法是使用像NDepend这样的工具。

0

一个快速的方法是在ILDASM打开它 - 它几乎总是显示在你的代码中使用每种类型和方法的完整的命名空间......但是你可以perfer使用反射,所以你可以切换从IL到C#..当然你需要先编译它:)

相关问题