Ни один из двух языков не может указывать, что функция принимает массив определенной длины. Проблема в том, что проверить, действительно ли вызывающая сторона предоставляет массив такой длины, довольно сложно. Его можно проверить, когда массив создается напрямую с помощью new byte[8]
, но во всех других случаях требуются некоторые хитрые приемы.
Это частично делается с помощью Code Contracts , который является инструментом для дополнительной проверки, который можно установить в Visual Studio и использовать как с C #, так и с F #. Позволяет написать что-то вроде:
byte CheckSum(byte[] data) {
Contract.Requires(data != null);
Contract.Requires(data.Length == 8);
// Implementation
}
Code Contracts поставляется с инструментом, который выдает предупреждение во время компиляции, когда вы вызываете CheckSum
с массивом неправильного размера. Он также может генерировать проверку во время выполнения (когда он не может статически определить правильность вызова).