C# 将一些元素传递给方法

C# 将一些元素传递给方法,c#,refactoring,C#,Refactoring,我有一些方法可以捕获固定大小的集合(例如2、3、5)。我无法决定哪种方式更好: public void Foo(IEnumerable<Object> objects) { if(objects.Count() != 3) { throw new Exception() } // actions } public void Foo(Object objectA, Object objectB, Object objectC) {

我有一些方法可以捕获固定大小的集合(例如2、3、5)。我无法决定哪种方式更好:

public void Foo(IEnumerable<Object> objects)
{
    if(objects.Count() != 3)
    {
        throw new Exception()
    }
    // actions
}

public void Foo(Object objectA, Object objectB, Object objectC)
{
    // actions
}
public void Foo(IEnumerable对象)
{
如果(objects.Count()!=3)
{
抛出新异常()
}
//行动
}
public void Foo(对象objectA、对象objectB、对象objectC)
{
//行动
}

每个选项都有最终的+\-吗?

在我看来,第二个更好:

  • 从签名中可以明显看出,它期望3个值
  • 在编译时而不是执行时标记失败

如果您需要特定数量的成员,请使用第二个选项。如果允许集合,但在运行时引发异常,则方法的使用者会感到困惑。如果未使用适当的测试,并且具有误导性,则可能会或可能不会发现这种情况。始终为使用您的代码的人设计,不要假设您始终是维护代码的人。

我会这样做:

public class Bar
{
    public Object object1;
    public Object object2;
    public Object object3;

    // add a constructor if you want
}

...

public void Foo(Bar b)
{
      // actions
}

虽然第一种方法可能更为有效flexible@lordkain所需集合成员的数量降低了它的灵活性,因为在调用该方法时会引发一个未突出显示的异常。因为“灵活性”是一个用词不当的词,所以它更危险,更具误导性