Это предупреждение CA2000 появляется всякий раз, когда у вас есть возвращаемое значение, которое IDisposable, и не обрабатывает случай, когда метод вызывает исключение.В этом случае вызывающая сторона не получит действительного экземпляра вашего объекта, поэтому it не сможет его утилизировать.Поэтому вы должны.
Я предполагаю, что вы не захотите избавиться от объекта, если успешно извлечете его из кэша.В этом случае вам нужно будет сделать что-то подобное, чтобы убедиться, что объект, который вы можете создать локально, будет расположен во всех случаях:
public RegionContext GetContext(string regionCode)
{
RegionContext temp = null;
RegionContext rc = null;
try
{
if (!this.contextCache.TryGetValue(regionCode.ToUpper(), out rc))
{
temp = new RegionContext(regionCode);
this.contextCache.Add(regionCode.ToUpper(), temp);
rc = temp;
temp = null;
}
return rc;
}
finally
{
if ( temp != null )
{
temp.Dispose();
}
}
}