次のコードは、コンパイル時に「あいまいな呼び出し一致」をスローします。
class ABC{}
class DEF{}
class Program
{
    static void Main(string[] args)
    {
        Debug.WriteLine(func(null));
    }
    static string func(ABC abc)
    {
        return "";
    }
    static string func(DEF def)
    {
        return "";
    }
}
ただし、次のコードは正常にコンパイルおよび実行されます。
static void Main(string[] args)
{
    Debug.WriteLine(func(null));
}
static string func(int? abc)
{
    return "function a";
}
static string func(float? def)
{
    return "function b";
}
出力中
function a
C# は、2 番目の例でどの関数を選択するかをどのように判断するのでしょうか?