在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)
{
//
}
我仍然不清楚您的问题。假设您正在搜索方法重载