泛型方法T类型是约束类型,不是传递对象的真实类型
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
...
我有另一个类似的方法,其中方法的泛型类型是我传递给他的对象的泛型类型,这个工作正常
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);
}
第二个输出是 TContext 的实际类型,泛型是 'created' 并在方法中使用的类型。
我有一个带有 ILogicPointContext
约束的通用方法。
此方法调用具有相同约束的其他泛型方法,但代码抛出异常,因为我需要类型是正确的类型,而不是接口类型。
public void DoSomething<TContext>(TContext ctx)
where TContext : ILogicPointContext
{
var typeOfCtx = ctx.GetType(); // CcpContex
var typeOfT = typeof(TContext); // ILogicPointContext
...
我有另一个类似的方法,其中方法的泛型类型是我传递给他的对象的泛型类型,这个工作正常
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);
}
第二个输出是 TContext 的实际类型,泛型是 'created' 并在方法中使用的类型。