我打算使用 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() 的调用将返回类型名称?