Roadmap › C# Language — Basics to Advanced › Module: Methods and Functional C#
Lessons in this course (38)
24. Extension methods, generics and constraints
Intermediate★ Must knowLesson 24 of 38
csharp
public static class StringExtensions
{
public static bool IsEmail(this string s) => s.Contains('@'); // call as "x@y.com".IsEmail()
}
public class Repository<T> where T : class, IEntity, new()
{
private readonly List<T> _items = [];
public T Create() { var t = new T(); _items.Add(t); return t; }
}
T Max<T>(T a, T b) where T : IComparable<T> => a.CompareTo(b) >= 0 ? a : b;Constraints: where T : class, struct, new(), notnull, unmanaged, a base class, an interface, or T : U.
Covariance / contravariance: IEnumerable<out T> lets IEnumerable<string> be used as IEnumerable<object>; Action<in T> lets Action<object> be used as Action<string> — see the next lesson.