Why doesn't delegate contravariance work with value types?

前端 未结 3 1276
礼貌的吻别
礼貌的吻别 2020-12-01 11:02

This snippet is not compiled in LINQPad.

void Main()
{
    (new[]{0,1,2,3}).Where(IsNull).Dump();
}

static bool IsNull(object arg) { return arg == null; }
<         


        
3条回答
  •  醉酒成梦
    2020-12-01 11:44

    It doesn't work for an int because there are not objects.

    Try:

    void Fun()
    {
        IEnumerable objects = (new object[] { 0, 1, null, 3 }).Where(IsNull);
    
        foreach (object item in objects)
        {
            Console.WriteLine("item is null");
        }
    }
    
    bool IsNull(object arg) { return arg == null; }
    
        

    提交回复
    热议问题