我正在阅读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个接口。我想也许那会很多而且不需要。如果有人想要所有代码,我会乐意把它放在这里。
答案 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];
}
这会导致它返回一个空的整数数组。