The type or namespace name 'T' could not be found
C#GenericsC# 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