Why go via a byte? You can go straight to uint. Unfortunately C#/.Net doesn't have bit booleans so I am not aware of a better approach than
uint BoolArrayToInt(bool[] bits){
if(bits.Length > 32) throw new ArgumentException("Can only fit 32 bits in a uint");
uint r = 0;
for(int i = 0; i < bits.Length; i++) if(bits[i]) r |= 1 << (bits.Length - i);
return r;
}