Обычно при создании экземпляров записи нет необходимости полностью квалифицировать каждое свойство, как вы делаете.
let authentication = {
AuthenticationRecord.Request = request;
AuthenticationRecord.UserName = loginRequest.UserName;
AuthenticationRecord.Password = loginRequest.Password;
AuthenticationRecord.CallbackUI = loginRequest.CallbackUI
}
Пока имена и типы свойств вы используете толькосоответствует одному типу записи, F # обычно достаточно умен, чтобы понять, что вы имели в виду.
let authentication = {
Request = request;
UserName = loginRequest.UserName;
Password = loginRequest.Password;
CallbackUI = loginRequest.CallbackUI
}
Кроме того, я могу склоняться к использованию sprintf
сверх String.Format
здесь:
String.Format(
"j_username={0}&j_password={1}&login={2}",
authentication.UserName,
authentication.Password,
"Login"))
sprintf "j_username=%s&j_password=%s&login=%s"
authentication.UserName authentication.Password "Login"
Но так как полученная строка передается в StreamWriter
, который наследуется от TextWriter
, другой вариант будет использовать fprintf
, который записывает непосредственно в TextWriter
.
fprintf streamWriter "j_username=%s&j_password=%s&login=%s"
authentication.UserName authentication.Password "Login"