繁体   English   中英

泛型方法T类型是约束类型,不是传入的真实类型 object

[英]Generic method T type is the constraint type, not the real type of the passed object

我有一个带有ILogicPointContext约束的通用方法。 此方法调用具有相同约束的其他泛型方法,但代码抛出异常,因为我需要类型是正确的类型,而不是接口类型。

public void DoSomething<TContext>(TContext ctx)
    where TContext : ILogicPointContext
{
    var typeOfCtx = ctx.GetType();  // CcpContex
    var typeOfT = typeof(TContext); // ILogicPointContext
    ...

我有另一个类似的方法,其中方法的通用类型是我传递给他的 object 的通用类型,这工作正常

private void InsertStepDefinition<TContext>(PipelineStepDefinition<TContext> stepInfo)
    where TContext : ILogicPointContext

在这种情况下,TContext 不是接口而是正确的类型。

我错过了什么?

泛型在使用变量类型调用时自动解析(不是使用 <> 调用方法)。

例子:

void Main()
{
    Foo var1 = new Foo();
    ILogicPointContext var2 = var1;
    
    DoSomething(var1); //outputs Foo: generic resolution is automatically done on variable type
    DoSomething(var2); //outputs ILogicPointContext, for the same reason
}



interface ILogicPointContext{}
class Foo:ILogicPointContext{}

void DoSomething<TContext>(TContext ctx)
    where TContext : ILogicPointContext
{    
    Console.WriteLine(typeof(TContext).Name);
}

第二个 output 是 TContext 的实际类型,泛型是“创建”的类型,并在方法中使用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM