错误:无法将lambda表达式转换为' int'因为它不是委托类型

时间:2014-10-26 18:23:50

标签: c# lambda overloading

我收到以下错误:

  

无法将lambda表达式转换为' int'因为它不是委托类型

运行此代码时:

namespace solutions  
{  
    class Program  
    {  
        static void Main()  
        {  
            int i=3, j=4,k,l;  
            k=AddMult(i,j);  
            l=AddMult(i,j);  
            Console.WriteLine("{0} {1}", k,l);  
        }  
        static int AddMult(int ii, int jj)  
        {
            int kk, m;  
            kk= ii+jj;  
            m=ii*jj;  
            return (kk , m);  
        }  
    }  
}  

3 个答案:

答案 0 :(得分:2)

问题在于

return (kk, m);

您是否想要仅返回m

答案 1 :(得分:1)

看起来您想要返回多个值。要做到这一点,有各种选择,但我个人会创建一个类:

public class AddedAndMultiplied
{
    public int Added { get; set; }
    public int Multiplied { get; set; }

}

你的功能变为:

static AddedAndMultiplied AddMult(int ii, int jj)  
{
    int kk, m;  
    kk= ii+jj;  
    m=ii*jj;  
    return new AddedAndMultiplied { Added = kk, Multipled = m };  
}  

最后你的主要功能改为:

var am = AddMult(i,j);  
Console.WriteLine("{0} {1}", am.Added, am.Multiplied);  

答案 2 :(得分:1)

您将AddMult函数的返回类型指定为int,但(kk , m)不是int。

有多种方法可以完成这项工作:

返回一个整数数组:

static int[] AddMult(int ii, int jj)
{
    int kk, m;
    kk= ii+jj;
    m=ii*jj;
    return new[] { kk, m };
} 

定义一个包含两个整数的类并返回此类:

class Result
{
    public int kk { get; set; }
    public int m { get; set; }
}

static Result AddMult(int ii, int jj)
{
    int kk, m;
    kk= ii+jj;
    m=ii*jj;
    return new Result { kk = kk, m = m };
} 

或者你可以使用通用的Tuple类:

static Tuple<int, int> AddMult(int ii, int jj)
{
    int kk, m;
    kk= ii+jj;
    m=ii*jj;
    return Tuple.Create(kk, m);
} 

编辑:您还需要相应地修改主程序。如果使用整数数组:

int[] result = AddMult(i,j); 
k = int[0];
m = int[1];