C# штука интересная, но мне лично не нравится .NET из-за его ограничений! Вот к примеру как-то встала задача передачи через COM-порт данных типа float. Как её сделать на билдере? Очень просто:
union
{
float f;
char b [4];
}
d;
...
d.f = 0.123;
...
for (int i = 0; i <= 3; i++)
PutUART(d.b [i]);
А на Delphi? Тоже несложно:
d = record
case Byte of
0 : (f : Single);
1 : (b : array [0..3] of Byte);
end;
...
d.f := 0.123;
for i := 0 to 3 do
PutUART(d.b [i]);
А на C#? Такого прямого метода там нет! Поэтому приходится записывать float в память, а затем оттуда считывать побайтно! Бред!
В свое время один наш программист сделал проще:
F = f * 1000;
PutUART(F >> 24);
PutUART((F >> 16) & 0xFF);
PutUART((F >> 8) & 0xFF);
PutUART(F & 0xFF);
Тут идёт округление до тысячных долей, то в той задаче этого было более чем достаточно!