【问题标题】:How to run statements in reverse c# [closed]如何在反向c#中运行语句[关闭]
【发布时间】:2018-04-23 20:07:38
【问题描述】:

我有一个以特定顺序运行特定代码块的 c# 方法。我想传递一个布尔参数:“IsRunningInReverse”,它将反转代码块的运行顺序?

我可以创建 2 个私有方法,以正常和反向顺序调用语句,但我想知道是否有更好的方法来完成此操作?

我正在考虑创建委托 (Action) 并将它们存储在一个列表中,然后布尔值“IsRunningInReverse”将确定我是以升序还是降序遍历列表,但我不知道那是最干净的解决方案。

任何意见将不胜感激。

谢谢!

【问题讨论】:

  • minimal reproducible example 在这里会很有帮助。
  • 在 C#7.3 中,您可以将括号放在方法名称的前面,它会反向执行。这样做是为了简化某些 LINQ 表达式。以e.(a.foo <= a)OrderBy 为例。
  • @EdPlunkett 认真的吗?他们对 c# 9.0 有什么计划?也可以颠倒编写 lambda 表达式?这段代码对我来说似乎太难读了,我不确定这是因为我变老了,我更难学习新技巧,还是因为它只是,嗯,倒退。
  • 谢谢!有那么一分钟,我以为我太老了,无法胜任这份工作:-)
  • @Pac0 你得反问他。

标签: c# .net lambda


【解决方案1】:

您的解决方案对我来说似乎很好。

使用Actions 将是一个惯用的现代 C# 对象包装器,您可以轻松地操作它们。

将它们放入列表很简单,并且可以满足您的需求(倒序),甚至更多(任意重新排序)

也许更复杂且值得考虑的是:您需要共享数据吗?

处理这个应该不会太难,但你需要更多的结构(例如设计一些数据共享类。


如果您想走得更远,一旦您对自己的解决方案感到更加自在,不妨了解一下expression trees。

这将是操纵不同操作/动作的强大工具。但请注意,学习差距很大,它比动作列表要复杂得多。如果您只是想逆向操作,我仍然认为您的List<Action> 想法更干净,因为它更简单和可读。我只是觉得值得一提。

【讨论】:

    【解决方案2】:

    我会怎么做: 使您的“步骤”分开功能。 制作任务和“等级”的字典。 然后根据您的需求对 asc/desc 进行排序。

    【讨论】:

    • 或者一种丑陋的方式是使用“switch”和任务#...并按 asc/desc 排序
    • 为什么是字典?一个简单的 List 或数组会更简单,并且可能具有更好的性能。
    • 我个人同意我会构建一个“排名”类或类似的东西,并且也只使用列表对象来存储,但在这里字典是更简单的方法。
    • @Trey 如果他们在集合中的唯一原因是为了订购,请使用有序集合并在需要时将其反转。除了不必要的复杂性之外,我没有看到字典增加了什么。
    • 是的......并不是说我的方式是世界上最伟大的,只是简单,它回答了这个问题。有很多方法可以做到这一点。坦率地说,Ed,你的答案通常是最干净的。 :-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-15
    • 1970-01-01
    • 1970-01-01
    • 2021-06-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多