56

.NET4.0プロジェクトでコンパイルしている次のコードがあります

namespace ConsoleApplication1  
{  
    class Program  
    {  
        static void Main(string[] args)  
        {  

        }  
    }  

    public static class Utility  
    {  
        public static IEnumerable<T> Filter1(this IEnumerable<T> input, Func<T, bool> predicate)  
        {  
            foreach (var item in input)  
            {  
                if (predicate(item))  
                {  
                    yield return item;  
                }  
            }  
        }  
    }  
}  

しかし、次のエラーが発生します。System.dllはすでにデフォルトとして参照に含まれています。私が間違っているのは何ですか?

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?) 
4

5 に答える 5

75

関数自体にtype引数を設定する必要があります。

public static IEnumerable<T> Filter1<T>(...)
于 2012-06-21T17:55:33.210 に答える
50
public static class Utility 
{  
    public static IEnumerable<T> Filter1<T>( // Type argument on the function
       this IEnumerable<T> input, Func<T, bool> predicate)  
    {  

拡張メソッドであるかどうかを気にしない場合は、クラスに汎用制約を追加できます。私の推測では、拡張メソッドが必要です。

public static class Utility<T> // Type argument on class
{  
    public static IEnumerable<T> Filter1( // No longer an extension method
       IEnumerable<T> input, Func<T, bool> predicate)  
    {  
于 2012-06-21T17:55:41.453 に答える
18

Tメソッド名またはクラス名の後に発生するを宣言する必要があります。メソッド宣言を次のように変更します。

public static IEnumerable<T> 
    Filter1<T>(this IEnumerable<T> input, Func<T, bool> predicate) 
于 2012-06-21T17:55:35.450 に答える
2

同じエラーが発生しましたが、必要な解決策が少し異なりました。私はこれを変更する必要がありました:

public static void AllItemsSatisy(this CollectionAssert collectionAssert, ICollection<T> collection, Predicate<T> predicate) 
{ ... }

これに:

public static void AllItemsSatisy<T>(this CollectionAssert collectionAssert, ICollection<T> collection, Predicate<T> predicate) 
{ ... }
于 2019-05-17T14:26:28.340 に答える
0

<T>はオブジェクトのタイプを意味します

IEnumerable<yourObject>

ここに詳細情報があります:http: //msdn.microsoft.com/en-us/library/9eekhta0.aspx

于 2012-06-21T17:55:39.153 に答える