ジェネリック メソッドを持つ非ジェネリック クラスがあります。このメソッドのジェネリック型は出力型を定義し、使用法から推測できないため、明示的にジェネリック型を提供する必要があります。この型は、ジェネリック呼び出し元のメソッド型パラメーターから渡されることもありますが、あるインスタンスでは、自分で明示的に指定する必要があります。
問題は、明示的に提供されたジェネリック型メソッド呼び出しを呼び出すと、実行されず、まったく無関係な型が返されるように見えることです。この呼び出しにデバッグできず、無効な結果が得られます。しかし、特に奇妙なことに、実行が中断されることはありません。ジェネリック型が呼び出し元のジェネリック メソッド型から渡される他の場所から同じメソッドが呼び出されると、すべてが定義どおりに機能するように見えます。
私は何が起こっているのか完全に失われています。
インターフェイスでの私のメソッド定義(およびクラスで後で実装されます):
TRecord Update<TRecord>(int recordId, int? categoryId, string categoryName, string title)
where TRecord : Record;
私Record
のクラスは抽象的ではなく、継承する型は 1 つだけです。
public class Record : ProtectedEntity
{
...
}
public class RelatedRecord<T> : Record
{
public IList<T> Related { get; private set; }
...
}
私はこれを行うメソッドを呼び出しています:
var record = myRepo.Update<Record>(...);
実行がこの行にF11到達すると、デバッグするためにヒットしますが、実行は次の文にジャンプするだけです。record
変数をチェックすると、タイプRecord
ではなくSystem.String
、パラメータの値を持っていますcategoryName
。これは、何かが実行されることを意味しますが、それは間違いなく私のジェネリック メソッドの本体ではありません。
奇妙なことに、他の場所では同じ呼び出しが期待どおりに機能します。
これはどのように説明でき、何が間違っているのでしょうか?