2017-03-09 54 views
0

我试图返回一个整数数组,并不能得到它的工作...如何使用C#Interop返回整数数组?

下面ID我的代码,对return array

以下错误无法隐式转换类型“诠释[]”到‘廉政’

public int getIndexes(int num) 
    { 
     var wb = (Excel.Workbook)Globals.ThisAddIn.Application.ActiveWorkbook; 
     var wsEvars = wb.Sheets["Evars"]; 


     Excel.Worksheet sheet = null; 
     if (num == 0) sheet = wsEvars; 

     if (num != 2) 
     { 
      var rng = (Excel.Range)sheet.Range[sheet.Cells[3, 2], sheet.Cells[3, 27]]; 
      var wsValues = rng.Cells.Value; 
      int scopeIndex = 0; 
      int methodIndex = 0; 
      int delimiterIndex = 0; 
      int formatIndex = 0; 
      int count = 0; 

      foreach (var head in wsValues) 
      { 
       if (head == "*Scope") 
        scopeIndex = count + 1; 
       if (head == "Set Method") 
        methodIndex = count + 1; 
       if (head == "Delimiter") 
        delimiterIndex = count + 1; 
       if (head == "Format") 
        formatIndex = count + 1; 
      } 
      int[] array = new int[]{scopeIndex, methodIndex, delimiterIndex, formatIndex}; 
      return array; 
     } 
    } 
+3

您的方法的类型是int,但您试图返回一个整数数组。因此,也可以将方法的类型更改为int []。 –

+0

试过了,但除了以前的'ExcelSDRAddIn.UserControlSDR.getIndexes(int)',我得到以下错误:并非所有的代码路径都返回一个值' – Valip

+2

你不觉得这是一个非常明确的错误信息吗? – TaW

回答

2

的问题是,你的方法返回一个int,而不是int[]只要你想。另外,你正在做if区块内的回报,并且不能确保return将会被击中,因为只有当条件成立时才会发生。如果条件错误怎么办?在这种情况下你没有返回任何东西。从块中获取return

public int[] getIndexes(int num) 
{ 
    int[] array = null; 
    var wb = (Excel.Workbook)Globals.ThisAddIn.Application.ActiveWorkbook; 
    var wsEvars = wb.Sheets["Evars"]; 


    Excel.Worksheet sheet = null; 
    if (num == 0) sheet = wsEvars; 

    if (num != 2) 
    { 
     var rng = (Excel.Range)sheet.Range[sheet.Cells[3, 2], sheet.Cells[3, 27]]; 
     var wsValues = rng.Cells.Value; 
     int scopeIndex = 0; 
     int methodIndex = 0; 
     int delimiterIndex = 0; 
     int formatIndex = 0; 
     int count = 0; 

     foreach (var head in wsValues) 
     { 
      if (head == "*Scope") 
       scopeIndex = count + 1; 
      if (head == "Set Method") 
       methodIndex = count + 1; 
      if (head == "Delimiter") 
       delimiterIndex = count + 1; 
      if (head == "Format") 
       formatIndex = count + 1; 
     } 
     array = new int[]{scopeIndex, methodIndex, delimiterIndex, formatIndex}; 
    } 
    return array; 
} 
+0

当条件为false时,我将处理该情况以返回其他值。改变代码后,我得到:'使用未分配的局部变量'数组' ' – Valip

+0

do int [] array = null; – NicoRiff