开发者

Change Code to .net 2.0

开发者 https://www.devze.com 2023-01-19 10:13 出处:网络
It seem that .net 2.0 do not support OrderByDescending for dictionary keys , how can I change this code to .net 2.0

It seem that .net 2.0 do not support OrderByDescending for dictionary keys , how can I change this code to .net 2.0

    private static Dictionary<byte[], Func<BinaryReader, Size>> imageFormatDecoders = new Dictionary<byte[], Func<BinaryReader, Size>>()
 {
     { new byte[]{ 0x42, 0x4D }, DecodeBitmap},
     { new byte[]{ 0x47, 0x49, 0x46, 0x38, 0x37, 0x61 }, DecodeGif },
     { new byte[]{ 0x47, 0x49, 0x46, 0x38, 0x39, 0x61 }, DecodeGif },
     { new byte[]{ 0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A }, DecodePng },
     { new byte[]{ 0xff, 0xd8 }, DecodeJfif },
 };


public static Size GetDimensions(BinaryReader binaryReader)
     {
         int maxMagicBytesLength = imageFormatDecoders.Keys.OrderByDescending(x => x.Length).First().Length;
         byte[] magicBytes =开发者_JS百科 new byte[maxMagicBytesLength];
         for (int i = 0; i < maxMagicBytesLength; i += 1)
         {
             magicBytes[i] = binaryReader.ReadByte();
             foreach (var kvPair in imageFormatDecoders)
             {
                 if (magicBytes.StartsWith(kvPair.Key))
                 {
                     return kvPair.Value(binaryReader);
                 }
             }
         }
         throw new ArgumentException(errorMessage, "binaryReader");
     }


I suspect you simply lack;

using System.Linq;

At the top of the code file. And no, switching to .net 2 won't help here.


This line

int maxMagicBytesLength = imageFormatDecoders.Keys.OrderByDescending(x => x.Length).First().Length;

just gets the length of the longest byte array in the keys of your dictionary. So just iterate through your items in imageFormatDecoders and record the longest value, i.e., something like this (untested):

int maxMagicBytesLength = 0;
foreach (byte[] magicBytes in imageFormatDecoders.Keys) {
    if (magicBytes.Length > maxMagicBytesLength)
        maxMagicBytesLength = magicBytes.Length;
}


What do you mean that .net 3.5 does not support OrderByDescending. It does. And by the way what is wrong with Max(x => x.Length)?


What's wrong with this, in .Net 3.5?

Dictionary<int, int> dict = new Dictionary<int, int>();
dict[0] = 2;
dict[1] = 3;

foreach (var item in dict.OrderByDescending(key => key.Value))
{
    Console.WriteLine(item.Key);
    Console.WriteLine(item.Value);
} 

Output

1

3

0

2

0

精彩评论

暂无评论...
验证码 换一张
取 消