У меня есть класс asp.net/C#, который изменяет размеры изображений для кеширования на сервере в виде файлов, однако часть кода, которая определяет, какой кодировщик использовать, иногда бросает исключение NullReferenceException.
Вот код, который инициализирует и передает обратно кодеры:
public static class ImageUtilities{
private static Dictionary<string, ImageCodecInfo> encoders = null;
public static Dictionary<string, ImageCodecInfo> Encoders{
get{
if (encoders == null){
encoders = new Dictionary<string, ImageCodecInfo>();
}
//if there are no codecs, try loading them
if (encoders.Count == 0){
foreach (ImageCodecInfo codec in ImageCodecInfo.GetImageEncoders()){
encoders.Add(codec.MimeType.ToLower(), codec);
}
}
return encoders;
}
}
...
Это конкретная строка, на которую распространяется исключение:
encoders.Add(codec.MimeType.ToLower(), codec);
Это текст ошибки:
Object reference not set to an instance of an object.
at System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boolean add)
at System.Collections.Generic.Dictionary`2.Add(TKey key, TValue value)
Это единственное место, где вызывается свойство Encoders (а затем строка ниже этой в трассировке стека):
if (Encoders.ContainsKey(lookupKey)){
foundCodec = Encoders[lookupKey];
}
Даже если lookupKey был нулевым, не должен ли поиск просто возвращать null, а не бросать исключение?