2009-08-19 74 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#..當然你需要先編譯它:)

相關問題