2

我正在阅读 Mark Michaelis 的书Essentials C# 3.0 for .NET framework 3.5。由于涉及的课程更多,我希望有人已经完成了这本书并且可能遇到了同样的问题。

第 7 章中的代码失败(第 300 页)。清单 7.2 展示了如何集成一个接口,我已经按照书中所说的那样编写了所有代码。我收到错误:

'xxxx.ConsoleListControl.DisplayHeader(string[])':并非所有代码路径都返回值。

有问题的代码是:

    public static void List(string[] headers, Ilistable[] items)
    {
        int[] columnWidths = DisplayHeaders(headers);

        for (int count = 0; count < items.Length; count++)
        {
            string[] values = items[count].ColumnValues;
            DisplayItemsRow(columnWidths, values);
        }
    }

    /// <summary>
    /// Displays the column headers
    /// </summary>
    /// <returns>returns an array of column widths</returns>
    private static int[] DisplayHeaders(string[] headers)
    {

    }

    private static void DisplayItemsRow(int[] columnWidths,string[] values)
    {

    }
}

标题string[]中填充了 4 项(名字、姓氏、地址、电话)。我不知道是什么导致了这个问题,或者如何解决它。我看DisplayHeaders没有价值,columnwidths也没有价值。

我没有把所有的代码放在这里;有5个类和1个接口。我想也许这太多了,不需要了。如果有人想要所有的代码,我很乐意把它放在这里。

4

3 回答 3

4

翻页,或者再读一遍。我猜你应该在方法中编写代码,因为它有一个返回类型但没有返回语句。

编辑:好的,下载PDF,这本书在代码清单上方明确说明:

考虑另一个例子

在代码中它说:

private static int[] DisplayHeaders(string[] headers)
{
    // ...
}

// ...部分表示对所解释的概念不感兴趣的内容为简洁起见而省略了。

显示代码是为了解释接口可以做什么(在这种情况下打印实现的任何类型的对象的列表Ilistable),静态辅助方法与此无关。该代码不打算运行。

于 2013-09-27T13:37:08.233 回答
3

任何具有非 void 类型的方法都必须返回该类型的对象。所以 DisplayHeaders 必须返回一个整数数组。

private static int[] DisplayHeaders(string[] headers)

private- 访问修饰符;表示该方法只能在类内调用

static- 静态修饰符;此方法不需要调用实例

int[]- 返回类型;这是此方法将返回的对象的类型

DisplayHeaders- 方法名称;这就是您引用此方法的方式

(string[] headers)- 参数; 这表明您需要将哪些参数传递给方法

我们可以从方法摘要中推断出它的实现可能看起来像这样:

    /// <summary>
    /// Displays the column headers
    /// </summary>
    /// <returns>returns an array of column widths</returns>
    private static int[] DisplayHeaders(string[] headers)
    {
        // builds a new int array with the same 
        // number of elements as the string array parameter
        int[] widths = new int[headers.Length];

        for (int i = 0; i < headers.Length; i++)
        {
            Console.WriteLine(headers[i]); // displays each header in the Console
            widths[i] = headers[i].Length; // populates the array with the string sizes
        }

        // the return keyword instructs the program to send the variable 
        // that follows back to the code that called this method
        return widths; 
    }

我会继续阅读这一章。作者很可能稍后会填写该方法的实现细节。

于 2013-09-27T13:38:11.157 回答
0

DisplayHeaders 方法说它返回一个整数数组 ( int[]) 但实际上它没有返回任何东西。稍后很可能会有代码填充该方法以做一些有用的事情,但为了使代码编译,它需要返回一个数组。一种简单的方法是将其更改为

private static int[] DisplayHeaders(string[] headers)
{
    return new int[0];
}

这会导致它返回一个空的整数数组。

于 2013-09-27T13:45:41.387 回答