using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
public static void Main()
string? s1 = GetValueOrDefault<string>(null);
string s2 = GetValueOrDefault<string>("");
IEnumerable<string?> e1 = GetValuesOrDefault<string>(null);
IEnumerable<string> e2 = GetValuesOrDefault<string>("");
[return: NotNullIfNotNull(nameof(defaultValue))]
public static T? GetValueOrDefault<T>(T? defaultValue)
return GetValueFromSomewhere<T>() ?? defaultValue;
public static IEnumerable<T?> GetValuesOrDefault<T>(T? defaultValue)
return GetValuesFromSomewhere<T>().Select(x => x ?? defaultValue);
private static T? GetValueFromSomewhere<T>() => default(T);
private static IEnumerable<T?> GetValuesFromSomewhere<T>() => new T?[] { default(T) };