c# - 我应该选择 C# 7.0 元组而不是 `out` 吗?
问题描述
public Task<User> Register(User user, string password)
{
byte[] passwordHash, passwordSalt;
CreatePasswordHash(password, out passwordHash, out passwordSalt);
user.PasswordHash = passwordHash;
user.PasswordSalt = passwordSalt;
return user;
}
public void CreatePasswordHash(string password, out byte[] passwordHash, out byte[] passwordSalt)
{
using (var hmac = new System.Security.Cryptography.HMACSHA512())
{
passwordSalt = hmac.Key;
passwordHash = hmac.ComputeHash(System.Text.Encoding.UTF8.GetBytes(password));
}
}
或元组:
public Task<User> Register(User user, string password)
{
byte[] (passwordHash, passwordSalt) = CreatePasswordHash(password, passwordHash, passwordSalt);
user.PasswordHash = passwordHash;
user.PasswordSalt = passwordSalt;
return user;
}
public (byte[], byte[]) CreatePasswordHash(string password, byte[] passwordHash, byte[] passwordSalt)
{
using (var hmac = new System.Security.Cryptography.HMACSHA512())
{
passwordSalt = hmac.Key;
passwordHash = hmac.ComputeHash(System.Text.Encoding.UTF8.GetBytes(password));
return (passwordSalt, passwordHash);
}
}
我目前正在使用上面的代码,它使用out
关键字。在这种情况下,是否最好使用 C# 7.0 值元组而不是使用out
关键字?
解决方案
它们几乎是一样的。
if (int.TryParse(text, out var value))
比眼睛更容易
var (success, value) = int.TryParse(text);
if (success)
但是如果你的方法是异步的,你就无法逃脱它
var (success, value) = await int.TryParseAsync(text);
if (success)
将来,您可能可以执行以下操作:
if (var (success, value) = int.TryParse(text); success)
但暂时没有。。