使用通用返回类型不工作的重载静态方法

时间:2013-01-29 12:02:01

标签: c# visual-studio-2010 static

我在静态类中定义了以下2个重载的staic方法:

private static Dictionary<int, PartitionDefinition> GetNewPartitionDefinitions (string  measureGroup, int rangeThreshold)
    {
         do something;
}
private static Dictionary<int, PartitionDefinition> GetNewPartitionDefinitions(DateRange startDateRange)
{
do something else;
}

我得到的行为是代码中首先列出的方法是在设计时识别的方法。链中的后续方法名称变为灰色,如果我将鼠标悬停在它上面,则会收到消息“方法永远不会被使用”。

我还注意到,如果我尝试调用该方法,intellisense只检测出现在代码中的第一个,就像另一个不存在一样。

研究问题我“相信”我可以消除类型擦除的条件,但我不是100%绝对肯定。

我知道以下代码对于使用Generics的Type Erasure有效:

public class A {
 public static MethodOne  (List<String> param) {}
 public static MethodOne  (Dictionary<String,String> param) {}
}

但是在这种情况下,泛型作为参数传递,所以我可以看到这会导致问题。在我的实例中,只有返回类型是相同的泛型类型,但有人会认为具有相同的方法名称并且明确具有不同的非泛型参数类型和数字应该有效。

有人可以对此有所了解吗?我在这里查看了类似的文章帖子,但它们似乎都没有描述我看到的确切问题。

我不是编程的新手,但我并不认识一切,这对我来说是第一次。

1 个答案:

答案 0 :(得分:2)

您收到的消息可能是因为您没有在代码中使用该方法,实际上允许重载静态方法的问题并且不应该是一个问题或导致任何编译器错误,您可能需要检查配置是否有警告和VS中的提示。

我刚用这段代码测试过它:

public static class TestClass
    {
        public static string stat(string measureGroup, int rangeThreshold)
        {
            return "st1";
        }

        public static string stat(int startDateRange)
        {
            return "st2";
        }

        private testmethode()
        {
           // string h = TestClass.stat(.... at this point i get both variants offered)
        }

    }