2013-07-25 21 views
9

Tôi đã mã sau đây mà tôi đang biên soạn trong một dự án NET 4,0Phương thức mở rộng. Loại hoặc namespace tên 'T' không thể tìm được

public static class Ext 
{ 
    public static IEnumerable<T> Where(this IEnumerable<T> source, Func<T, bool> predicate) 
    { 
     if (source == null) 
     { 
      throw new ArgumentNullException("source"); 
     } 
     if (predicate == null) 
     { 
      throw new ArgumentNullException("predicate"); 
     } 
     return WhereIterator(source, predicate); 
    } 

    private static IEnumerable<T> WhereIterator(IEnumerable<T> source, Func<T, bool> predicate) 
    { 
     foreach (T current in source) 
     { 
      if (predicate(current)) 
      { 
       yield return current; 
      } 
     } 
    } 
} 

nhưng nhận lỗi sau đây. Tôi đã System.dll đã được bao gồm như là mặc định trong tài liệu tham khảo. Những gì tôi có thể làm sai?

Error 1 The type or namespace name 'T' could not be found (are you missing a using directive or an assembly reference?) 

Error 2 The type or namespace name 'T' could not be found (are you missing a using directive or an assembly reference?) 

Error 3 The type or namespace name 'T' could not be found (are you missing a using directive or an assembly reference?) 

Trả lời

23

Hãy thử:

public static IEnumerable<T> Where<T>(this IEnumerable<T> source, Func<T, bool> predicate) 

private static IEnumerable<T> WhereIterator<T>(IEnumerable<T> source, Func<T, bool> predicate) 

Nói tóm lại, bạn đang bỏ lỡ việc kê khai T generic (mà tất cả của T khác được suy ra từ) trong chữ ký phương pháp.

+0

Thanx bây giờ tôi cũng không học được điều gì mới mẻ. Đã cố gắng tìm ra cái này –

5

Bạn bỏ lỡ các định nghĩa phương pháp chung:

public static IEnumerable<T> Where<T>(this IEnumerable<T> source, Func<T, bool> predicate) 
{ 
    if (source == null) 
    { 
     throw new ArgumentNullException("source"); 
    } 
    if (predicate == null) 
    { 
     throw new ArgumentNullException("predicate"); 
    } 
    return WhereIterator(source, predicate); 
} 

private static IEnumerable<T> WhereIterator<T>(IEnumerable<T> source, Func<T, bool> predicate) 
{ 
    foreach (T current in source) 
    { 
     if (predicate(current)) 
     { 
      yield return current; 
     } 
    } 
} 

Thông báo các <T> sau tên phương pháp.

Các vấn đề liên quan