我试图将方法调用的参数限制为 2 个不同类之一。我不知道这是否可能,或者我是否必须从一个公共(public)基类继承这两个类。
这是我目前使用的,但我想让这种类型安全:
public static AdoptionApplicationCollection GetApplicationsByApplicant (object applicant)
{
if (applicant.GetType() == typeof(Person))
{
// blah
}
else if (applicant.GetType() == typeof(Organization))
{
// blah
}
// A whole lot more blah
}
我想让申请人成为Person或Organization类型的泛型。
最佳答案
除了我的原始答案之外,还有另一种方法,即您在问题代码中所做的,称为模式匹配。与使用 if
不同,C#
有一个用于强制转换和检查类型的快捷方式,而无需这个丑陋的 typeof()
public static AdoptionApplicationCollection GetApplicationsByApplicant (object applicant)
{
switch(applicant)
{
case Person p:
Console.WriteLine("The person is " + p);
break;
case Organization o:
Console.WriteLine("The organization is " + o);
break;
}
}
在 Person
情况下,p
对象将是 applicant
自动转换为 Person
类型。在 Organization
情况下,o
将是自动转换为 Organization
类型的 applicant
。这是一个非常有用且方便的工具,可以使您的代码更具可读性。请记住,这是一项 C# 7.0 功能,因此请确保您使用的是该版本或更高版本。
关于多个类的 C# 泛型参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61705146/