анонимный делегат hashCode - PullRequest
0 голосов
/ 20 мая 2011

Я думал о создании некоторого помощника кеша, который получает Func<T> (или некоторый делегат для .Net2.0), вычисляет его хеш-код (или любую другую уникальную строку) и, если у него есть код, не существует, добавляет его вкеш.

Возможно ли это вообще?Имеет ли этот подход смысл?

Как определить разницу между:

GetCache(() => string.Format("{0}", 1));

И

GetCache(() => string.Format("{0}", 2))

?

Ответы [ 2 ]

2 голосов
/ 20 мая 2011

Вы должны не использовать хеш-коды для определения уникальности.Это не то, для чего они здесь.

В вашем примере два лямбда-выражения в итоге создадут отдельные методы для делегатов ... но вполне возможно (не гарантировано), что они это сделают в любом случае , даже если код внутри был точно таким же.Другими словами, я думаю, что идея кэширования в целом не будет работать так, как вы ожидаете.

0 голосов
/ 20 мая 2011

Проблема в том, что ваши lambas могут включать захваченные переменные вне их области видимости, поэтому, например,

String.Format("{0}", i);

будет оценивать по-разному в зависимости от значения I, когда оно было захвачено.Если это того стоит, потому что вызываемые вами делегаты дороги, вам, вероятно, нужно создать объект более высокого уровня, который включает ваши методы и достаточно метаданных, чтобы найти их обратно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...