2014-10-26 89 views
-3

,我發現了以下錯誤:錯誤:無法轉換lambda表達式類型「詮釋」,因爲它不是一個委託類型

Can not convert lambda expression to type 'int' because it is not a delegate type

雖然運行此代碼:

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); 
     } 
    } 
} 
+0

檢查AddMult – 2014-10-26 18:28:04

+0

的返回類型另外請注意,聲明/在一行是針對微軟的C#編碼約定初始化多個變量:http://msdn.microsoft.com/en -us/library/ff926074.aspx(「每行只寫一個聲明」) – furkle 2014-10-26 18:28:18

+0

爲了您將來的理智,我建議您爲變量和參數選擇更多的描述性名稱。 – 2014-10-26 18:28:34

回答

0

它看起來像你想返回多個值。要做到這一點有不同的選擇,但我個人會創建一個類:

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

} 

A-和你的函數變爲:

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); 
+0

看着接收端,它看起來並不像那樣! – TaW 2014-10-26 18:30:58

+0

看着接收端正是我認爲他想要兩個值的原因。他調用函數兩次將結果存儲到多個變量中,假設語法允許。 – DavidG 2014-10-26 18:32:18

+0

恩,int是一個int,但後來,誰在乎.. – TaW 2014-10-26 18:32:59

1

的問題是與行

return (kk, m); 

你也許想要返回只是m

+1

對我來說,有趣的是,編譯器認爲'return(kk,m)'是一個lambda表達式。 – 2014-10-26 18:29:19

+0

我很確定OP想要返回兩個值,但不知道所需的語法。 – DavidG 2014-10-26 18:30:25

+1

@StephenKennedy我認爲除了錯誤地開始一個'(kk,m)=> ...'lambda表達式之外,我不認爲有任何其他解析方法。它可能已經解析了它,檢測到lambda表達式不合適,發佈了一個關於該錯誤的錯誤,並且沒有進一步調查lambda表達式。 – hvd 2014-10-26 18:35:25

0

你指定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]; 
+0

看着接收端,它看起來並不像那樣! – TaW 2014-10-26 18:31:30

+0

返回(kk,m)和函數名稱表明他試圖返回兩個值。 – 2014-10-26 18:37:12

+0

無法將int類型[int]隱式轉換爲「int」...在使用第一種方法時(在函數調用時)在主函數中獲取此錯誤 – Maddy 2014-10-26 18:49:49

相關問題