将方法存储到变量中并在 C# 中以三元形式使用它们

我有一段简单的代码,我正在努力使它对我的三元组更简单。


我有一个很长的方法,想把它塞进一个变量中,这样更容易阅读,但不知道该怎么做。


我的代码目前看起来像这样:


_gridPositionLastFrame = _buildState == BuildState.None ? Grids.Snap(worldPosition,1,plane); : Grids.Snap(worldPosition,4,plane);

我想缩短它更像:


//Set the functions in variables here first some how rather than compute them

//var snapOne as Grids.Snap(worldPosition,1,plane);

//var snapFour as Grids.Snap(worldPosition,4,plane);

_gridPositionLastFrame = _buildState == BuildState.None ? SnapOne() : SnapFour();

这可能吗 ?这确实有助于使我的脚本在某些部分变得更干净,但我不知道编写它的正确方法。


海绵宝宝撒
浏览 201回答 3
3回答

慕婉清6462132

你很接近: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);这需要更少的逻辑重复。

慕码人8056858

我不知道你的GridSnap函数的签名,但我会假设它看起来像:TR GridSnap(T1, int, T2)因此,您可以编写如下代码:Func<TR> SnapOne = () => Grids.Snap(worldPosition, 1, plane);Func<TR> SnapFour = () => Grids.Snap(worldPosition, 4, plane);就在你的三元之上。

江户川乱折腾

你也可以这样做(对于 ref 和 out 类型的方法,这不起作用)_gridPositionLastFrame&nbsp;=&nbsp;Grids.Snap(worldPosition,&nbsp;&nbsp;_buildState&nbsp;==&nbsp;BuildState.None&nbsp;?&nbsp;1:&nbsp;4&nbsp;,plane);
打开App,查看更多内容
随时随地看视频慕课网APP