我有:
警告类型参数'TFrom'与外部类型
中的类型参数同名
private class InnerExpressionTransformer<TFrom, TTo> : ExpressionVisitor
where TTo : TFrom
{
private ParameterExpression _parameter;
public InnerExpressionTransformer()
{
_parameter = Expression.Parameter(typeof(TTo));
}
}
我该如何解决这个问题?
答案 0 :(得分:1)
如警告所示,您有一个具有相同名称的类型参数。这是一个警告,因为嵌套类共享其父类型的通用参数 - 您必须引用Outer<Paraneter>.Inner
。因此,名称可能会发生冲突,因此,该类型参数的任何使用都将使用内部定义,从而隐藏外部参数。虽然这可能是预期的行为,但如果你试图引用外部,它可能会导致讨厌的问题。
有两种方法可以解决这个问题,首先要确保你需要这种内部类型。如果你只是简单地重复外部通用,那就完全没必要了,可以不用了;如果TTo : TFrom
是外部类的泛型参数,则TFrom
之类的约束也会起作用。因此:
public class ExpressionTransformer<TFrom>
{
// ...
private class InnerExpressionTransformer<TTo>
where TTo : TFrom
{
// ...
}
}
第二种方法,如果内部参数是必要的,只需重命名其中一个参数,通常是内部参数。由于这是一个私人课程,因此最容易在那里进行更改,例如TFromInner
。