单独的方法或修改现有的功能

发布于 2025-02-05 04:16:13 字数 1803 浏览 1 评论 0原文

我正在构建方法转换 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返回boolvaldate而不是抛出异常。

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

残疾 2025-02-12 04:16:13

如果您的validate中的语句语句,我不喜欢嵌套的。如果您也给它一个OUT参数怎么办 -

private bool Validate(string binaryString, out string error)
{
     error = null;
     if (binaryString is null || binaryString.Length == 0)
     {
         error = "Can't convert null or empty string";
         return false;
     }

     if (binaryString.Any(value => (byte)value is not 48 or 49))
     {
          error = "Can't convert non-binary string";
          return false;
     }

     return true;
}

那么您有两种使用它的方法

public int Convert(string binaryString)
{
    if(!Validate(binaryString, out var error))
    {
        throw new InvalidDataException(error);
    }

    return ConvertInternal(binaryString);
}

-

public bool TryConvert(string binaryString, out int result)
{
    result = 0;

    if (!Validate(binaryString, out var error))
    {
        return false;
    }

    result = ConvertInternal(binaryString);
    return true;
}

I don't like the nested if statements in your validate. What if you gave it an out parameter too -

private bool Validate(string binaryString, out string error)
{
     error = null;
     if (binaryString is null || binaryString.Length == 0)
     {
         error = "Can't convert null or empty string";
         return false;
     }

     if (binaryString.Any(value => (byte)value is not 48 or 49))
     {
          error = "Can't convert non-binary string";
          return false;
     }

     return true;
}

Then you have two methods that use it -

public int Convert(string binaryString)
{
    if(!Validate(binaryString, out var error))
    {
        throw new InvalidDataException(error);
    }

    return ConvertInternal(binaryString);
}

and

public bool TryConvert(string binaryString, out int result)
{
    result = 0;

    if (!Validate(binaryString, out var error))
    {
        return false;
    }

    result = ConvertInternal(binaryString);
    return true;
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文