0

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

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

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

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

研究我“相信”的问题,我可以消除类型擦除的问题,但我不是 100% 绝对确定这一点。

我知道以下代码对使用泛型的类型擦除有效:

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

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

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

我对编程并不陌生,但我并不声称自己什么都知道,这对我来说是第一次。

4

1 回答 1

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)
        }

    }
于 2013-01-29T12:15:01.433 回答