我创建了一个简单的扩展方法,可以将任何数字转换为新的稍短的文本。它通过使用低于 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 也不是静态的。
蝴蝶不菲
相关分类