在C#中,是否可能只要求两个参数中的一个参数传递给方法
本文关键字:参数 两个 一个 方法 参数传递 是否 | 更新日期: 2023-09-27 18:09:13
考虑
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)
{
//
}
我只需要其中一个参数就可以确定年龄。因此,是否可以限制方法Test的调用,使其只能使用一个参数(即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(default(Type1), param2);
,这将在方法内部带来更多的问题-我们如何区分0(默认值(int((的值是被赋予该方法还是被赋予默认值,并且应该使用dateOfBirth
。
我认为可选参数不会有帮助,因为只有正确的参数才是可选的,自动值和用户给定值之间的区别问题仍然没有解决,而代码契约可能很有用:
public void Test(Type1 param1, Type2 param2)
{
Contracts.Requires((param1 == null && param2 != null) || (param1 != null && param2 == null), "Only one parameter is needed");
// ...
}
但我不确定为什么你真的需要这样的解决方案(方法有两个间歇性可选的参数(。您将不得不处理其中一个params为null(或默认结构(的事实——这最多是增加Test(Type1 param1, Type2 param2)
复杂性的一个分支。我建议您使用两种单独的单参数方法:
public void CheckSomeAgeRelatedInfo(int age)
{
//
}
public void CheckSomeAgeRelatedInfo(DateTime dateOfBirth)
{
//
}