Change 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
精彩评论