在函数中的成员值之间进行选择的最佳方式

本文关键字:选择 行选 最佳 方式 函数 成员 之间 | 更新日期: 2023-09-27 18:34:08

首先,我为标题完全道歉,我不知道该怎么说,在标题中真正解释这是一个令人困惑的概念,所以请耐心等待。

public class fido
{       
   public void foo(process proc)
   {
      if (/* comparing by time */)
      {
         if (proc[parent].time < proc[child].time)
         {
            //do something
         }
      }
      else if (/* comparing by priority */)
      {
         if (proc[parent].priority < proc[child].priority)
         {
            //do something
         }
      }
   }
}

我该如何缩短它? 我希望它可以像通过 foo() 参数使用"定义"成员一样简单。

例如

public class fido
{       
   public void foo(process proc, something mem)
   {
      if (/* comparing by time */)
      {
         if (proc[parent].mem < proc[child].mem)
         {
            //do something
         }
      }
   }
}

然后我会使用类似的东西

foo(processA, time); // If I want to use time member
foo(processB, priority); // Or if I want to use priority member

我知道以前的代码是 100% 不正确的,但我希望你明白我的意思。

我只是想缩短代码,因为我有一个优先级队列类,它使用堆和所有内容来确定值的优先级,但是我需要将该类用于多种类型的值,例如时间和优先级。 我绝对不想创建一个重复的类(完全没有好处),我正在寻找一种可以缩短它的方法。 有人知道最好的方法吗?

在函数中的成员值之间进行选择的最佳方式

可以将enum作为方法中的参数传递。

public class Fido
{
    public void foo(Process proc, Options options)
    {
        if (options == Options.Time)
        {
            //Do time work
        }
        else if (options == Options.Priority)
        {
            //Do priority work
        }
    }
}
public enum Options
{
    Time,
    Priority
}

请注意,传递bool而不是enum在这里也可以。它只是使事情变得不那么可读。