c# - 通用接口(interface)类型

标签 c# generics

我做了一个迷你项目来反射我导入的 dll 中的所有接口(interface),它继承 self 的“IBase”接口(interface),就像这样

 Type[] services = typeof(DataAccess.IXXX).Assembly.GetTypes();
 foreach (Type SC in services)
        {
            if (SC.IsInterface)
            {
                if (SC.GetInterfaces().Contains(typeof(DataAccess.IBase)))
                {
                    file.WriteLine(SC.Name);
                }
             }
         }

问题是我的很多接口(interface)都包含泛型

public interface IExample<TKey, Tvalue, TCount> : IBase

但是我的SC.Name是这样写的

IExample'3

你能帮帮我吗?

最佳答案

IExample'3 是具有 3 个通用类型参数的接口(interface)的内部名称(您可能已经猜到了)。要获取类或接口(interface)的通用类型参数,请使用 Type.GetGenericArguments

你可以使用这样的东西来打印正确的名字

var type = typeof(IExample<int, double>);
var arguments = Type.GetGenericArguments(type);
if(arguments.Any())
{
    var name = argument.Name.Replace("'" + arguments.Length, "");
    Console.Write(name + "<");
    Console.Write(string.Join(", ", arguments.Select(x => x.Name));     
    Console.WriteLine(">")
}
else
{
    Console.WriteLine(type.Name);
}

关于c# - 通用接口(interface)类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33230723/

相关文章:

c# - 我如何知道 TextRange 是否是或包含超链接?

C# - 实际例子 - 抽象类的刚性

c# - 传单从鼠标事件设置矩形坐标

java - 将参数化类转换为参数的子类

java - Spring Security ACL - @PreAuthorize 泛型和接口(interface)

c# - 是否可以从委托(delegate)中别名/引用委托(delegate)?

具有参数化列表类型参数的Java方法

c# - 如何在 C# 中使用 LINQ 方法或查询表达式检索最后 5 条记录

c# - 捕获左/右软键按下——C# .net CF 3.5

c# 泛型变量声明,这可能吗?