在C#中,是否可能只需要将两个参数中的一个传递给方法?

在C#中,是否可能只需要将两个参数中的一个传递给方法?,c#,methods,parameters,restriction,C#,Methods,Parameters,Restriction,考虑一下 public void Test(Type1 param1, Type2 param2) { //... } 我想知道在C中是否可能要求调用Test时,它必须只包含一个参数。例如,Test(param1)或Test(param2)(其中param1和param2分别属于Type1和Type2类型。应该不可能调用Test(param1,param2) 我的目的是强制执行限制,所以使用可选参数对我来说不起作用 由于问题不清楚,大家考虑下面的例子:< /强> public voi

考虑一下

public void Test(Type1 param1, Type2 param2)
{
   //...
}
我想知道在C中是否可能要求调用
Test
时,它必须只包含一个参数。例如,
Test(param1)
Test(param2)
(其中
param1
param2
分别属于
Type1
Type2
类型。应该不可能调用
Test(param1,param2)

我的目的是强制执行限制,所以使用可选参数对我来说不起作用

<强>由于问题不清楚,大家考虑下面的例子:< /强>

public void Test(int age, DateTime dob)
{
   //
}

我只需要一个参数来确定年龄。因此,是否可以限制方法测试的调用,以便只能使用一个参数来调用它,即
age
dob
,但不应同时使用这两个参数来调用它。

我建议您使用重载方法:

public void Test(Type1 param1)
{
   this.Test(param1, null);
}

public void Test(Type2 param2)
{
   this.Test(null, param2);
}


private void Test(Type1 param1, Type2 param2)
{
   //...
}
如果类型推断没有问题,您就不会有问题

编辑

在您的情况下,您将遇到一些问题-您的参数是结构(它们不能为null)。在这种情况下,您将不得不使用
this.Test(默认值(Type1),param2);
这将在方法内部带来更多问题-我们如何区分0的值(默认值(int))已输入到方法中,或已作为默认值提供,应改用
出生日期

我认为可选参数不会有帮助,因为只有正确的参数是可选的,自动值和用户给定值之间的差异问题仍然没有解决,而代码契约可能有用:

public void Test(Type1 param1, Type2 param2)
{
    Contracts.Requires((param1 == null && param2 != null) || (param1 != null && param2 == null),       "Only one parameter is needed");
    // ...
}
但我不确定为什么您真的需要这样一个解决方案(带有两个间歇性可选参数的方法)。您必须处理其中一个参数为null(或默认结构)的事实-这最多是多了一个分支来增加
测试的复杂性(Type1 param1,Type2 param2)
。我建议您使用两种单独的单参数方法:

public void CheckSomeAgeRelatedInfo(int age)
{
   //
}


public void CheckSomeAgeRelatedInfo(DateTime dateOfBirth)
{
   //
}

我仍然不清楚您的问题。假设您正在搜索方法重载