Essentials C#framework 3.5示例代码中的book错误

时间:2013-09-27 13:33:31

标签: c# .net

我正在阅读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个项目(FirstName,LastName,Address,Phone)。  我不知道是什么导致了这个问题,或者如何解决它。我看到DisplayHeaders没有价值,columnwidths也没有价值。

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

3 个答案:

答案 0 :(得分:4)

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

编辑:好的,下载了PDF,书上面明确说明了这段代码:

  

考虑另一个示例

在代码中它说:

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

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

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

答案 1 :(得分: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; 
    }

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

答案 2 :(得分:0)

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

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

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