You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#如何仅传入接口名称而非对象调用泛型方法?

解决方案:无需传递实例的泛型接口查找方法

你完全可以不用传递接口实例,直接通过泛型类型参数指定要查找的接口,就能避免临时创建对象的开销。

优化后的方法定义

修改泛型方法,去掉参数,仅保留类型参数和约束:

public T FindItems<T>() where T : ISomeInterface
{
    // 通过 typeof(T) 获取目标接口的类型信息
    Type targetInterface = typeof(T);
    
    // 执行你的查找逻辑,比如定位实现该接口的对象
    object foundObject = GetImplementationForInterface(targetInterface);
    
    // 转换为目标接口类型并返回
    return (T)foundObject;
}

调用方式

调用时直接通过尖括号指定接口类型即可,无需传递任何实例:

IMyInterface result = FindItems<IMyInterface>();

该方案的优势

  1. 类型安全:泛型约束where T : ISomeInterface会在编译时检查传入的类型是否符合要求,避免运行时类型错误。
  2. 无额外开销:不需要创建临时的接口实现类对象,省去了对象创建和销毁的资源消耗。
  3. 代码更简洁:调用方式直观,直接明确要查找的接口类型。

备选方案(若需显式传递类型)

如果出于特定场景需要显式传递类型对象,也可以采用以下方式,但不如无参数泛型方案简洁:

public T FindItems<T>(Type interfaceType) where T : ISomeInterface
{
    // 验证传入的类型是否匹配泛型参数
    if (interfaceType != typeof(T))
    {
        throw new ArgumentException("传入的类型与泛型参数不匹配");
    }
    
    // 执行查找逻辑
    object foundObject = GetImplementationForInterface(interfaceType);
    return (T)foundObject;
}

调用示例:

IMyInterface result = FindItems<IMyInterface>(typeof(IMyInterface));

内容的提问来源于stack exchange,提问作者SEGMK

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 09:10:08