ASP.NET中的静态扩展方法

时间:2019-03-13 08:40:45

标签: c# asp.net

我创建了一个简单的扩展方法,该方法可以将任何数字转换为稍短的新文本。它通过使用低于10的10个数字值以及字母字符来实现此目的。

所以问题是,是否存在同时访问此方法的调用,另一个用户会话将从一个用户会话中覆盖代码char1和char2

这是方法的代码

 public static string Translate35(this int value)
    {   //O is just removed to avoid confusion between 0 and O
        string[] Enc = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z" };

        int char1 = (value % Enc.Length);
        int char2 = (value / Enc.Length) % Enc.Length;
        int char3 = (int)(value / Math.Pow(Enc.Length, 2)) % Enc.Length;
        int char4 = (int)(value / Math.Pow(Enc.Length, 3)) % Enc.Length;
        int char5 = (int)(value / Math.Pow(Enc.Length, 4)) % Enc.Length;
        return Enc[char5] + Enc[char4] + Enc[char3] + Enc[char2] + Enc[char1];
    }

    public static int Translate35(this string value)
    {   //O is just removed to avoid confusion between 0 and O
        string[] Enc = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z" };

        var indexEnc = Enc.Select((x, i) => new { charx = x, charindex = i }).ToDictionary(x => x.charx[0], x => x.charindex);

        int char0 = (int)(indexEnc[value[0]] * Math.Pow(Enc.Length, 4));
        int char1 = (int)(indexEnc[value[1]] * Math.Pow(Enc.Length, 3));
        int char2 = (int)(indexEnc[value[2]] * Math.Pow(Enc.Length, 2));
        int char3 = (int)(indexEnc[value[3]] * Math.Pow(Enc.Length, 1));
        int char4 = indexEnc[value[4]];
        return char4 + char3 + char2 + char1 + char0;
    }

因此,我要避免的是此方法正在操纵一个用户数据,并且随着数据的流向

int char3 = (int)(value / Math.Pow(Enc.Length, 2)) % Enc.Length;

然后它的char2已经设置。

然后另一个用户数据开始相同的过程并到达char2并执行

int char2 = (value / Enc.Length) % Enc.Length;

它会覆盖第一个用户变量还是保存它,因为变量char2也不是静态的。

1 个答案:

答案 0 :(得分:2)

该方法没有副作用。他们什么也不做,只能接受输入,在本地处理并返回输出。因此,由于没有共享资源需要照顾,因此许多并行调用没有问题。

如果您使用的是代码注释,则在使用Resharper时,可以使用[Pure]System.Diagnostics.Contracts.PureAttribute中的JetBrains.Annotations.PureAttribute属性。

不过,可以通过将静态只读数据移动到其自身成员中来对其进行一些优化。