我想根据一个列表生成一些东西。
例如,我想生成一个17 / 21或25单位宽度的购物中心。
然后,我将产卵3商店内的购物中心。
我希望一个方法(GStoreDis)将返回一个3个相应号码的列表,当我用25 /21/17调用该方法时。
17个单位宽度的商场
1.布局1(10、5、2)
1.布局2(7、5、5)
21个单位宽度的商场
1.布局1(10、6、5)
1.布局2(7、7、7)
25个单位宽度的商场
1.布局1(10、10、5)
1.布局2(9、8、8)
private List<int> GStoreDis(int StoreBlockLength)
{
switch (StoreBlockLength)
{
case 25:
switch (Random.Range(1,3 )) //Roll out 1 or 2
{
case 1:
var List2501 = new List<int>()
{
10,10,5
};
return List2501;
case 2:
var List2502 = new List<int>()
{
9,8,8
};
return List2502;
}
default:
Debug.Log("Input must be 17 / 21 / 25");
break;
}
}
我现在只介绍了25个单位宽度的购物中心的布局。但是Unity控制台一直说“不是所有的代码路径都会返回一个值”。这对我来说很困惑,任何帮助都将非常感激。谢谢!
任何建议都可以
2条答案
按热度按时间wztqucjr1#
在C#中,
switch
中的case
必须返回某些内容或至少返回break。让我减少您的交换机,看看问题出在哪里:
如果其他case都不满足,外部switch中的第一个case就不会返回任何内容。由于C#不允许在case之间有代码时出现“fall through”,因此必须在末尾添加return或break。
在这种情况下,您可能只需在内部开关之后添加一个简单的
break;
即可:另外,仅仅在末尾使用break,会使方法没有返回任何内容,正如Obscure021所说,必须在方法末尾添加一个简单的return,如
return null;
。mqkwyuun2#
编译器不知道
Random.Range(1,3)
只返回1或2,所以它关心的是返回任何其他值时会发生什么,然后case 25:
将陷入下一种情况,这是被禁止的。当您将
case 2:
更改为default:
时,编译器知道每个值都已处理,并且“case 25”永远不会福尔斯下一个case。在最后的
default
中,返回 something(比如null
):这个方法需要一个返回值,所以每一个可能的代码路径(甚至是你知道永远不会出现的路径)都必须返回一个值(或者抛出一个异常)。