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

私が得ている動作は、コードの最初にリストされているメソッドが、設計時に認識されるものです。チェーン内の後続のメソッド名がグレー表示され、その上にカーソルを置くと、「メソッドは使用されていません」というメッセージが表示されます。

メソッドを呼び出そうとすると、インテリセンスはコードに最初に現れるものだけを検出し、他のものは存在しないことにも注意してください。

問題を調査すると、Type Erasure の状態を問題として排除できると「信じています」が、これについて 100% 絶対に確信があるわけではありません。

次のコードが Generics を使用した Type Erasure に有効であることは知っています。

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 に答える