While I was studying the delegate which is actually an abstract class in Delegate.cs, I saw the following method in which I don\'t understand
params Delegate?[] delegates - It is an array of nullable Delegate
params Delegate?[]? delegates - The entire array can be nullable
Since each parameter is of the type Delegate? and you return an index of the Delegate?[]? array, then it makes sense that the return type is Delegate? otherwise the compiler would return an error as if you were returing and int from a method that returns a string.
You could change for instance your code to return a Delegate type like this:
public static Delegate Combine(params Delegate?[]? delegates)
{
Delegate defaulDelegate = // someDelegate here
if (delegates == null || delegates.Length == 0)
return defaulDelegate;
Delegate d = delegates[0] ?? defaulDelegate;
for (int i = 1; i < delegates.Length; i++)
d = Combine(d, delegates[i]);
return d;
}