代码之家  ›  专栏  ›  技术社区  ›  lmcarreiro

为什么需要将方法强制转换为“Action”或“Func”才能在值元组中使用它?

  •  0
  • lmcarreiro  · 技术社区  · 6 年前

    为什么编译器不能处理这些 x3 x4 作业?

        void X()
        {
            (Func<int, int>, int) x1 = (GetX, 1);           // OK
            object x2 = x1;                                 // OK
            object x3 = (GetX, 1);                          // Error CS8135 Tuple with 2 elements cannot be converted to type 'object'.
            object x4 = (GetX, 1) as (Func<int, int>, int); // Error CS8307 The first operand of an 'as' operator may not be a tuple literal without a natural type.
            object x5 = ((Func<int, int>, int))(GetX, 1);   // OK
            object x6 = ((Func<int, int>)GetX, 1);          // OK
        }
    
        int GetX(int x)
        {
            return x;
        }
    
    1 回复  |  直到 6 年前
        1
  •  2
  •   Selman Genç    6 年前

    因为元组没有具体类型,除非您将其转换为更具体的类型。你的 GetX

    原因与本案类似:

    Delegate del = x => x * 2; // err
    Delegate del2 = (Func<int,int>)(x => x * 2); // OK