Convert number from base-10 number system to any number system I wrote a small method for convert number from base-10 number system to any number system (code is not perfect but that is not the point).
My question is if I get right single responsibility principle. Is 2nd approach better than 1st or 'charReplace' functionality is too small for creating own method ?

    public static string convertNumber(BigInteger num, int baseNum)
    {
        string symbols = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
        if (baseNum &lt; 2 || symbols.Length + 10 &lt; baseNum)
        {
            throw new Exception;
        }

        var result = "";
        do
        {
            var partResult = (int)(num % baseNum);
            if (partResult &gt;= 10)
            {
                result = result.Insert(0, symbols[partResult - 10].ToString());
            }
            else
            {
                result = result.Insert(0, partResult.ToString());
            }
            num /= baseNum;
        } while (num != 0);

        return result;
    }


vs.

    static readonly string Symbols = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";

    public static string convertNumber(BigInteger num, int baseNum)
    {
        if (baseNum &lt; 2 || Symbols.Length + 10 &lt; baseNum)
        {
            throw new Exception;
        }

        var result = "";
        do
        {
            var partResult = (int)(num % baseNum);
            result = result.Insert(0, charReplace(partResult));
            num /= baseNum;
        } while (num != 0);

        return result;
    }

    private static string charReplace(int number){
        if (number &lt; 10){
            return number.ToString();
        }

        return Symbols[number - 10].ToString();
    }
I believe the 1st approach is good enough since it personally more readable.

Little suggestions


I'd prefer to store the whole alphabet in the symbols string, instead of only letters. This could simplify the logic.
You can calculate the resulting length of the output string and avoid string insertions.  


Summarizing:

public static string ConvertNumber(BigInteger num, int baseNum)
{
    const string symbols = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
    if (baseNum &lt; 2 || symbols.Length &lt; baseNum)
    {
        throw new ArgumentOutOfRangeException(nameof(baseNum));
    }

    if (num &lt; 0)
    {
        throw new ArgumentOutOfRangeException(nameof(num));
    }

    var resultLength = 1 + Math.Max((int)BigInteger.Log(num, baseNum), 0);
    var result = new char[resultLength];
    int index = resultLength - 1;
    do
    {
        result[index--] = symbols[(int)(num % baseNum)];
        num /= baseNum;
    } while (num != 0);

    return new string(result);
}


PS. It's recommended to name all classes and all methods in UpperCamelCase regardless of their publicity.