为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
海绵宝宝撒 2022-01-09 10:43:51
我有一段简单的代码,我正在努力使它对我的三元组更简单。我有一个很长的方法,想把它塞进一个变量中,这样更容易阅读,但不知道该怎么做。我的代码目前看起来像这样:_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();这可能吗 ?这确实有助于使我的脚本在某些部分变得更干净,但我不知道编写它的正确方法。
查看完整描述

3 回答

?
慕婉清6462132

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);

这需要更少的逻辑重复。


查看完整回答
反对 回复 2022-01-09
?
慕码人8056858

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);

就在你的三元之上。


查看完整回答
反对 回复 2022-01-09
?
江户川乱折腾

TA贡献1851条经验 获得超5个赞

你也可以这样做(对于 ref 和 out 类型的方法,这不起作用)

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


查看完整回答
反对 回复 2022-01-09
  • 3 回答
  • 0 关注
  • 200 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信