ReSharper 2023.3 Help

Code Inspection: Return type can be IEnumerable<T> (non-private accessibility)

This is a solution-wide code inspection. It only works when the solution-wide analysis is enabled.

If a method returns a more generic type, it allows for more flexibility. For example, you can change the method's implementation without the need to update usages.

Also, returning a more generic type may help in the future if you decide to change the return value to a more specific type, for example, List<T>: if callers expect IEnumerable<T>, they will be able to accept List<T>, but not vice versa.

Below, ReSharper suggests changing the return type of GetNumbers() from List<String> to IEnumerable<String>:

Note that such a replacement is not always possible, though. If methods of the derived type are used on the returned object anywhere in the solution, ReSharper will not issue this suggestion.

class EnumerableTDemo { public static void Main() { string output = string.Join(" ", GetNumbers()); Console.WriteLine(output); } public static List<string> GetNumbers() { var Numbers = new List<string> {"1", "2", "3"}; return Numbers; } }
class EnumerableTDemo { public static void Main() { string output = string.Join(" ", GetNumbers()); Console.WriteLine(output); } public static IEnumerable<string> GetNumbers() { var Numbers = new List<string> {"1", "2", "3"}; return Numbers; } }

In some cases, however, returning a more specific type might be better. If a method is intended to work only with a specific type like an Array, and its implementation is unlikely to be changed in the future, you can suppress this inspection for that method.

Last modified: 21 March 2024