如何解决警告

时间:2015-08-24 14:37:08

标签: c# generics

我有:

  

警告类型参数'TFrom'与外部类型

中的类型参数同名
     private class InnerExpressionTransformer<TFrom, TTo> : ExpressionVisitor
        where TTo : TFrom
    {
        private ParameterExpression _parameter;

        public InnerExpressionTransformer()
        {
            _parameter = Expression.Parameter(typeof(TTo));
        }
    }

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

如警告所示,您有一个具有相同名称的类型参数。这是一个警告,因为嵌套类共享其父类型的通用参数 - 您必须引用Outer<Paraneter>.Inner。因此,名称可能会发生冲突,因此,该类型参数的任何使用都将使用内部定义,从而隐藏外部参数。虽然这可能是预期的行为,但如果你试图引用外部,它可能会导致讨厌的问题。

有两种方法可以解决这个问题,首先要确保你需要这种内部类型。如果你只是简单地重复外部通用,那就完全没必要了,可以不用了;如果TTo : TFrom是外部类的泛型参数,则TFrom之类的约束也会起作用。因此:

public class ExpressionTransformer<TFrom>
{
    // ...
    private class InnerExpressionTransformer<TTo>
        where TTo : TFrom
    {
        // ...
    }
}

第二种方法,如果内部参数是必要的,只需重命名其中一个参数,通常是内部参数。由于这是一个私人课程,因此最容易在那里进行更改,例如TFromInner