キャッシュキーを作成するためのToString()メソッドを使用するつもりです。このキャッシュは、メソッドレベルの呼び出しをキャッシュするために使用され、キーはパラメーター名と対応する値を使用して作成されます。このキャッシングは大規模なライブラリ用に構築されるため、すべてのメソッドに値型パラメーターのみがあること、またはすべてのクラスがシリアル化を実装していることを確認することはできません。実行時に、ToStringの呼び出しが型名に対して実際の値を返していることを確認して、メソッドの呼び出しがキャッシュへの参加を禁止できるようにする必要があります。
たとえば、次のメソッドとその呼び出しを検討してください
AccountDetails GetDetails(int groupId, Account account)
{
var ac1 = new Account( accountId = 123 };
var ac2 = new Account( accountId = 555 };
var return1 = GetDetails(15, ac1);
var return2 = GetDetails(15, ac2);
}
この場合、キャッシュキーを「groupId = 15 + account = namespace.Account」として作成すると、誤った衝突が発生します。account.GetString()を呼び出すと型名が返されることを実行時に検出するにはどうすればよいですか?