The type or namespace name 'T' could not be found

C#Generics

C# Problem Overview


I have following code that I am compiling in a .NET 4.0 project

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;  
                }  
            }  
        }  
    }  
}  

but getting following errors. I have System.dll already included as default in references. What I may be doing wrong?

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

C# Solutions


Solution 1 - C#

You have to put the type argument on the function itself.

public static IEnumerable<T> Filter1<T>(...)

Solution 2 - C#

public static class Utility 
{  
    public static IEnumerable<T> Filter1<T>( // Type argument on the function
       this IEnumerable<T> input, Func<T, bool> predicate)  
    {  

If you dont care if its an extension method or not, you can add a generic constrain to the class. My guess is you want the extension method.

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)  
    {  

Solution 3 - C#

You need to declare T, which occurs after the method name or class name. Change your method declaration to :

public static IEnumerable<T> 
    Filter1<T>(this IEnumerable<T> input, Func<T, bool> predicate) 

Solution 4 - C#

I had the same error, but solution required was slightly different. I needed to change this:

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

To this:

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

Solution 5 - C#

< T > means a type of object

IEnumerable<yourObject>

Here you have more information: http://msdn.microsoft.com/en-us/library/9eekhta0.aspx

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionimakView Question on Stackoverflow
Solution 1 - C#Paul PhillipsView Answer on Stackoverflow
Solution 2 - C#SwDevMan81View Answer on Stackoverflow
Solution 3 - C#spenderView Answer on Stackoverflow
Solution 4 - C#AndrewView Answer on Stackoverflow
Solution 5 - C#MCSIView Answer on Stackoverflow