多个类的 C# 泛型参数

标签 c# generics

我试图将方法调用的参数限制为 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
        }

我想让申请人成为PersonOrganization类型的泛型。

最佳答案

除了我的原始答案之外,还有另一种方法,即您在问题代码中所做的,称为模式匹配。与使用 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/

相关文章:

c# - 将样式应用于放置在 C# 代码中的 <a href> 标记

java - 通过转换将 List<String> 转换为 List<Object> 甚至 List<Integer>

linq - 动态 Linq 帮助,不同的错误取决于作为参数传递的对象?

c# - 如何使用 ConfigurationManager 通过 ClickOnce 更新来持久化 app.config?

c# - Windows xp 上的 DrawToBitmap

c# - 在 Xamarin.Forms 中处理 WebView 页面的正确方法是什么?

java - 如何获得<? super T> 来自 T

swift - 通用加法函数 Swift

c# - “无法从用法中推断出类型参数”

c# - 动态创建强名称,无需 Sn.exe