首页 > 解决方案 > 定义一个“类型”类型的变量,它只接受作为特定类型的子类的类型

问题描述

我正在使用 C#,我的代码中有以下方法:

public void Test(System.Type type) {...}

但我希望变量 'type' 代表一个必须是 class 子类的类型MyClass。为了清楚起见,我不希望“类型”本身成为一个子类,MyClass因为它应该代表一种类型。例如,Test(typeof(int))不应允许调用,因为 'int' 不是MyClass.

在 C# 中可能吗?

更新: 我花了很长时间试图在网上找到解决方案后问了这个问题,但事实证明之前已经问过这个问题:C#: Restricting Types in method parameters (not generic parameters),我错过了。太糟糕了,即使该线程中的答案似乎也无法正确解决问题。

更新 2: 事实证明(请参阅此问题的解决方案),可以使用泛型而不是将参数传递给方法,而且它似乎工作得很好。

标签: c#

解决方案


为此,您可以使用带有约束的泛型:

public void Test<T>() where T : MyClass
{
    var type = typeof(T);
    // ...
}

推荐阅读