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

C# 在函数中的成员值之间进行选择的最佳方法,c#,C#,首先,我为这个标题道歉,我不知道该说什么,在标题中真正解释这个概念是如此令人困惑,所以请容忍我 public class fido { public void foo(process proc) { if (/* comparing by time */) { if (proc[parent].time < proc[child].time) { //do something

首先,我为这个标题道歉,我不知道该说什么,在标题中真正解释这个概念是如此令人困惑,所以请容忍我

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
         }
      }
   }
}
我知道前面的代码是100%不正确的,但我希望你明白我的意思


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

您可以在方法中将
枚举作为参数传递

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
也可以。它只是让事情变得不那么可读。

听起来你想让你的类型成为泛型,并接受IEqualityComparer。是的,但我希望做的是这样做,这样它就不必进行检查以确认是否要按时间或优先级进行比较。@user1880591,那么你打算如何为每个场景执行不同的代码呢?您可以重载
foo()
,并根据您是否需要时间/优先级来执行重载方法,但在我看来,这是一个更好的解决方案。我只是想知道是否存在任何问题,但您使用enum的方式肯定比我目前拥有的更好。谢谢
foo(processA, time); // If I want to use time member
foo(processB, priority); // Or if I want to use priority member
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
}