【问题标题】:Change what a method returns at runtime in C#在 C# 中更改方法在运行时返回的内容
【发布时间】:2014-05-03 05:46:42
【问题描述】:

有没有什么办法可以让这个方法在运行时的特定条件下返回true?快速说明:我只想知道这是否可能。相信我,编写该方法的其他方式不会有帮助。

public bool Example()
{
    return false;         
}

if(//Certain condition is satisfied)
{
    //Example method returns true instead
}

【问题讨论】:

  • 为什么不将false 替换为Certain condition
  • 为什么是alternative ways of writing the method won't help
  • All I want to know is if this is at all possible - 可能不是您想要的方式。见stackoverflow.com/questions/3645410/…
  • @user3277234:“相信我,编写该方法的其他方法不会有帮助。”考虑到您问题的最佳答案,显然社区不信任您。我建议您解释为什么编写该方法的替代方法无济于事。许多 SO 用户太害怕 X-Y 问题,不愿意在奇怪的事情上提供帮助,直到他们知道为什么这些奇怪的事情是必要的。

标签: c# methods boolean return


【解决方案1】:

是的。我有时不得不这样做。这是我的工作:

  • 在进程启动之前将 CLR 分析器附加到进程。
  • 设置分析器在Example 被jitted 时回调。
  • 进行 IL 注入以将其内容替换为我选择的代码。

现在我控制方法返回真还是假。

【讨论】:

  • 从控制台/UI/文件中读取一些输入以确定要做什么不是更容易吗?
  • @Servy:几乎任何事情都会变得更容易。显然问题的条件是“不修改方法”。在我的情况下,我希望控制它是否返回 true 或 false 的方法在 MSBUILD 的实现内部,我无法更改 MSBUILD 的输入,但我需要更改它的行为。
【解决方案2】:

这样的?

public bool Example()
{
    if(//Certain condition is satisfied)
    {
        return true;
    }

    return false;         
}

相信我,编写该方法的其他方法不会有帮助。

我不敢苟同。也许如果您解释您的实际问题,而不是您尝试的解决方案,则可以给出更准确的答案。

【讨论】:

  • 只是不同。乞讨是不体面的。
  • @Dan-o 你能解释一下吗?非英语母语人士在这里。 ;-)
  • 这是一句油嘴滑舌的话。评论您的评论I beg to differ。我只是指出乞讨没有吸引力。你应该只是不同,忘记乞讨。它应该是幽默的。但与大多数幽默一样,如果需要解释,它就不好笑了。
  • 人们总是可以用return conditionalExpression; 替换这种模式,不需要if 或多次返回。
  • @Servy 当然,我只是将 if 移到方法中,以尽可能与问题中的代码相似。
【解决方案3】:
public bool Example()
{
 return Certaincondition;         
}

【讨论】:

    【解决方案4】:

    在不了解您的情况的情况下,您为什么不创建一个接口和两个实现(一个返回 true 的实现和一个返回 false 的实现);并根据您的 if 语句使用正确的实现?

     public interface IMyInterface
     {
         public bool MyMethod();
     }
    
     public class Impl1 : IMyInterface
     {
         public bool MyMethod()
         {
              return true;
         }
     }
    
     public class Impl2 : IMyInterface
     {
         public bool MyMethod()
         {
              return false;
         }
     }
    
     // in your logic somewhere
     if(//Certain condition is satisfied)
     {
         new Impl1().MyMethod();
     } else 
     {
         new Impl2().MyMethod();
     }
    

    【讨论】:

      猜你喜欢
      • 2015-04-25
      • 1970-01-01
      • 1970-01-01
      • 2021-11-24
      • 2015-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-03
      相关资源
      最近更新 更多