3 回答
![?](http://img1.sycdn.imooc.com/5458478b0001f01502200220-100-100.jpg)
TA贡献1804条经验 获得超2个赞
你很接近:
var snapOne as Grids.Snap(worldPosition, 1, plane);
var snapFour as Grids.Snap(worldPosition, 4, plane);
_gridPositionLastFrame = _buildState == BuildState.None ? snapOne : snapFour;
...但是Grids.Snap被调用了两次,即使其中一个调用没有被使用。在某些方法的情况下,这甚至可能会导致副作用。我建议提取出变化的部分:
var snapSize = _buildState == BuildState.None ? 1 : 4;
_gridPositionLastFrame = Grids.Snap(worldPosition, snapSize, plane);
这需要更少的逻辑重复。
![?](http://img1.sycdn.imooc.com/5458692c00014e9b02200220-100-100.jpg)
TA贡献1803条经验 获得超6个赞
我不知道你的GridSnap函数的签名,但我会假设它看起来像:
TR GridSnap(T1, int, T2)
因此,您可以编写如下代码:
Func<TR> SnapOne = () => Grids.Snap(worldPosition, 1, plane);
Func<TR> SnapFour = () => Grids.Snap(worldPosition, 4, plane);
就在你的三元之上。
![?](http://img1.sycdn.imooc.com/54584cb50001e5b302200220-100-100.jpg)
TA贡献1851条经验 获得超5个赞
你也可以这样做(对于 ref 和 out 类型的方法,这不起作用)
_gridPositionLastFrame = Grids.Snap(worldPosition, _buildState == BuildState.None ? 1: 4 ,plane);
- 3 回答
- 0 关注
- 200 浏览
添加回答
举报