单独的方法或修改现有的功能
我正在构建方法转换
turn Zeroe的字符串
将转换为int
:
public int Convert(string binaryString)
{
ValidateOrThrow(binaryString);
return ConvertInternal(binaryString); // Peforms convertion.
}
此方法运行提供的字符串验证:
private void ValidateOrThrow(string binaryString)
{
if (binaryString is null || binaryString.Length == 0)
throw new InvalidDataException("Can't convert null or empty string");
if (binaryString.Any(value => (byte)value is not 48 or 49))
throw new InvalidDataException("Can't convert non-binary string");
}
现在我想添加新方法tryConvert
返回bool
是valdate
而不是抛出异常。
public bool TryConvert(string binaryString, out int result)
{
if (!Validate(binaryString))
return false;
result = ConvertInternal(binaryString);
return true;
}
我可以使用bool
返回类型创建更多方法validate
,但它破坏了dry
。
否则我可以创建单个参数化方法并在两种情况下都使用不同的参数使用它:
private bool Validate(string binaryString, bool throwOnInvalidData)
{
if (binaryString is null || binaryString.Length == 0)
{
if (throwOnInvalidData)
throw new InvalidDataException("Can't convert null or empty string");
else
return false;
}
if (binaryString.Any(value => (byte)value is not 48 or 49))
{
if (throwOnInvalidData)
throw new InvalidDataException("Can't convert non-binary string");
else
return false;
}
return true;
}
这是有效的方式还是我缺少某些内容?
I'm building method Convert
to turn string
of zeroes and ones into int
:
public int Convert(string binaryString)
{
ValidateOrThrow(binaryString);
return ConvertInternal(binaryString); // Peforms convertion.
}
This method runs validation for provided string:
private void ValidateOrThrow(string binaryString)
{
if (binaryString is null || binaryString.Length == 0)
throw new InvalidDataException("Can't convert null or empty string");
if (binaryString.Any(value => (byte)value is not 48 or 49))
throw new InvalidDataException("Can't convert non-binary string");
}
Now I want to add new method TryConvert
which returns bool
as the result of Valdate
instead of throwing an exception.
public bool TryConvert(string binaryString, out int result)
{
if (!Validate(binaryString))
return false;
result = ConvertInternal(binaryString);
return true;
}
I can create one more method Validate
with bool
return type, but it breaks DRY
.
Or I can create single parameterized method and use it in both cases with different parameter:
private bool Validate(string binaryString, bool throwOnInvalidData)
{
if (binaryString is null || binaryString.Length == 0)
{
if (throwOnInvalidData)
throw new InvalidDataException("Can't convert null or empty string");
else
return false;
}
if (binaryString.Any(value => (byte)value is not 48 or 49))
{
if (throwOnInvalidData)
throw new InvalidDataException("Can't convert non-binary string");
else
return false;
}
return true;
}
Is this valid way or I'm missing something?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
如果您的validate中的语句语句,我不喜欢嵌套的
。如果您也给它一个OUT参数怎么办 -
那么您有两种使用它的方法
-
I don't like the nested
if
statements in your validate. What if you gave it an out parameter too -Then you have two methods that use it -
and