C# 与您的实际问题有关,但您是否希望这会产生输入中字母的随机顺序或输入中字母的随机字符串样本?ie您是否知道,abcde的输入可以产生aaaaaaa的输出?一个基于键生成相同输出的随机字符串函数,这不只是一种哈希函数吗?如果您想要一致的输出,可能某种哈希函数会

C# 与您的实际问题有关,但您是否希望这会产生输入中字母的随机顺序或输入中字母的随机字符串样本?ie您是否知道,abcde的输入可以产生aaaaaaa的输出?一个基于键生成相同输出的随机字符串函数,这不只是一种哈希函数吗?如果您想要一致的输出,可能某种哈希函数会,c#,.net,c#-4.0,C#,.net,C# 4.0,与您的实际问题有关,但您是否希望这会产生输入中字母的随机顺序或输入中字母的随机字符串样本?ie您是否知道,abcde的输入可以产生aaaaaaa的输出?一个基于键生成相同输出的随机字符串函数,这不只是一种哈希函数吗?如果您想要一致的输出,可能某种哈希函数会更好。已经有很多了。但这取决于你使用它的目的。你必须对随机构造函数使用相同的种子,或者与你的实际问题无关,但是你希望这会产生输入中字母的随机顺序,还是从输入中的字母样本中产生随机的字母字符串?ie您是否知道,abcde的输入可能会产生aaaaa



与您的实际问题有关,但您是否希望这会产生输入中字母的随机顺序或输入中字母的随机字符串样本?ie您是否知道,
abcde
的输入可以产生
aaaaaaa
的输出?一个基于键生成相同输出的随机字符串函数,这不只是一种哈希函数吗?如果您想要一致的输出,可能某种哈希函数会更好。已经有很多了。但这取决于你使用它的目的。你必须对
随机
构造函数使用相同的种子,或者与你的实际问题无关,但是你希望这会产生输入中字母的随机顺序,还是从输入中的字母样本中产生随机的字母字符串?ie您是否知道,
abcde
的输入可能会产生
aaaaaaa
的输出?值得一提的是,这不会在程序的多次运行之间产生一致的结果。这可能是个问题,也可能不是,但值得一提。很好,我没有考虑过。值得一提的是,这不会在程序的多次运行之间产生一致的结果。这可能是个问题,也可能不是,但值得一提。很好,我没有考虑它。
GetHashCode
不应该用于.NET中的持久性,它只保证在相同的
AppDomain
中“稳定”。如果这就是OP所需要的,好吧;如果他还需要跨域/应用程序运行/不同计算机持久化的内容,他将需要自己的哈希函数作为种子。@Luaan:这似乎在我的最后一段中已经介绍过(这段内容是在最初的帖子之后添加的,以防你觉得自己疯了,因为帖子没有列出编辑内容)@Chirs:在我的例子中,假设我传递字符串“iv3mw”,那么它将返回输出,即“3vmiw”。现在我想要这样,如果我再次传递相同的字符串“iv3mw”,在这种情况下,我想要和前面一样的输出,即“3vmiw”。呃。。。。您的输入是“iw3vm”,输出是“iv3mw”。它们在什么方面是相同的?你是说它为相同的输入生成不同的输出,还是说它生成的输出与原始程序不同?我不确定“3vmiw”在这里如何适用……
GetHashCode
不应该用于.NET中的持久性,它只能保证在相同的
AppDomain
中“稳定”。如果这就是OP所需要的,好吧;如果他还需要跨域/应用程序运行/不同计算机持久化的内容,他将需要自己的哈希函数作为种子。@Luaan:这似乎在我的最后一段中已经介绍过(这段内容是在最初的帖子之后添加的,以防你觉得自己疯了,因为帖子没有列出编辑内容)@Chirs:在我的例子中,假设我传递字符串“iv3mw”,那么它将返回输出,即“3vmiw”。现在我想要这样,如果我再次传递相同的字符串“iv3mw”,在这种情况下,我想要和前面一样的输出,即“3vmiw”。呃。。。。您的输入是“iw3vm”,输出是“iv3mw”。它们在什么方面是相同的?你是说它为相同的输入生成不同的输出,还是说它生成的输出与原始程序不同?我不确定“3vmiw”如何适用于这里……我在类级别声明了随机变量,我在类级别声明了随机变量
 public string RandomString(string key = "")
    {
        string input = "";
        if (key.Trim() == "")
        {
            input = "abcdefghijklmnopqrstuvwxyz0123456789";
        }
        else
        {
            input = key;
        }
        var chars = Enumerable.Range(0, 5)
                               .Select(x => input[random.Next(0, input.Length)]);
        return new string(chars.ToArray());
    }
Dictionary<string, string> cache = new Dictionary<string, string>

public string RandomString(string key = "")
{
    string input = "";
    if (key.Trim() == "")
    {
        input = "abcdefghijklmnopqrstuvwxyz0123456789";
    }
    else
    {
        input = key;
    }

    if (cache.ContainsKey(input))
    {
        return cache[input];
    }
    else
    {
        var chars = Enumerable.Range(0, 5)                               
            .Select(x => input[random.Next(0, input.Length)]);
        var value = chars.ToArray();
        cache[input] = value;
        return value;
    }
}
public string RandomString(string key = "")
{
    var random = new Random(key.GetHashCode());
    string input = "";
    if (key.Trim() == "")
    {
        input = "abcdefghijklmnopqrstuvwxyz0123456789";
    }
    else
    {
        input = key;
    }
    var chars = Enumerable.Range(0, 5)
                           .Select(x => input[random.Next(0, input.Length)]);
    return new string(chars.ToArray());
}
using System.Security.Cryptography;
using (MD5 md5Hash = MD5.Create())
{
        byte[] data = md5Hash.ComputeHash(Encoding.UTF8.GetBytes(source));
        StringBuilder sBuilder = new StringBuilder();

        for (int i = 0; i < data.Length; i++)
        {
            sBuilder.Append(data[i].ToString("x2"));
        }

        return sBuilder.ToString();                
}