Comment

Comment by chrisoverzero

> Luckily, since type constraints are part of the signature of the method and there is no ambiguity, I am allowed to make this overload.

This isn’t the case. It’s allowed because the question-mark syntax means two different things in value- and reference-type contexts. The signatures really look like this:

    public static IEnumerable<TR> SelectNotNull<T, TR>(
      this IEnumerable<T> source,
      Func<T, TR> fn)
      where TR : class // …and the nullability of TR is tracked by the compiler

    public static IEnumerable<TR> SelectNotNull<T, TR>(
      this IEnumerable<T> source,
      Func<T, Nullable<TR>> fn)
      where TR : struct
This is an allowable overload.

No comments yet

Be the first to share your thoughts.

Live from the official Hacker News API

A modern reader for Hacker News · SvelteKit + Skeleton