我有这个代码(它背后的整个故事在这里:https ://codereview.stackexchange.com/questions/28990/fancy-pants-vs-cowboy-coding ):
public class BeltPrinterFactory : IBeltPrinterFactory
{
public IBeltPrinter NewBeltPrinter()
{
switch (printerChoice)
{
case BeltPrinterType.ZebraQL220:
return new ZebraQL220Printer();
case BeltPrinterType.ONiel:
return new ONielPrinter();
default:
return new ZebraQL220Printer();
}
}
}
...但是在枚举中添加了“无”,因为许多客户不会拥有/使用一个:
public enum BeltPrinterType
{
None,
ZebraQL220,
ONiel
// add more as needed
}
编译器不允许我没有默认情况(“并非所有代码路径都返回值”)。
“无”选项可能应该是默认情况,但如果“无”是打印机选择的当前值,则永远不应该调用工厂(当“无”是值时,启动滚球的 GUI 甚至不会显示) ,但是为了编译器的缘故,这应该如何实现呢?我能以某种方式返回任何东西吗?或者我需要做一些“奇怪”的事情,比如:
. . .
default:
return new None();
. . .
public class None : IBeltPrinter
{
public void PrintLabel(string price, string description, string barcode)
{
;// do nothing
}
}