String Format object extension
There are not much to review, so to answer your questions:


It's a good extension if you can see it useful in more than one place.
It makes sense.
I can't see anything else to consider - a null check on the predicate maybe?
If the exception thrown by the predicate when @this is null is good enough for you, don't bother further.




I don't see why the restriction where T: class is necessary



If you always want to generate a string containing a list of properties (or another predefined format), you could change the signature to:

public static string ToString&lt;T&gt;(this T @this, params Func&lt;T, object&gt;[] getters)
{
  return string.Join(", ", getters.Select(g =&gt; g(@this)));
}


called as:

handler.GetUserById(id)?.ToString(p =&gt; p.LastName, p =&gt; p.FirstName)


so that you don't have to format the input when calling the extension.