考虑一下,
public void Test(Type1 param1, Type2 param2)
{
//...
}
我想知道在 C# 中是否可以要求在调用 Test
时它必须只包含一个参数。 IE。 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)
{
//...
}
如果类型推断没有问题,你就没有问题。
编辑
在你的情况下你会遇到一些问题 - 你的参数是结构(它们不能为空)。在这种情况下,您将不得不使用 this.Test(default(Type1), param2);
这将在方法内部带来更多问题 - 我们如何区分 0(default( int)) 被提供给方法,或者它被作为默认值提供,应该改用 dateOfBirth
。
我不认为可选参数会有帮助,因为只有正确的参数才是可选的,而且自动值和用户给定值之间的区分问题仍未解决,而代码契约可能会有用:
public void Test(Type1 param1, Type2 param2)
{
Contracts.Requires((param1 == null && param2 != null) || (param1 != null && param2 == null), "Only one parameter is needed");
// ...
}
但我不确定为什么您真的需要这样的解决方案(具有两个间歇性可选参数的方法)。您将不得不处理其中一个参数为 null(或默认结构)的事实 - 这最多是一个分支来增加 Test(Type1 param1, Type2 param2)
的复杂性。我建议您使用两个单独的单参数方法:
public void CheckSomeAgeRelatedInfo(int age)
{
//
}
public void CheckSomeAgeRelatedInfo(DateTime dateOfBirth)
{
//
}
关于c# - 在 C# 中是否可能只需要将两个参数之一传递给方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24305437/