在asp.net中生成随机数

时间:2017-03-27 12:53:17

标签: c# asp.net asp.net-mvc-5

我想生成10位数的字母数字代码的凭证,错误是 "不能隐含地转换' void' to system.collections.generric.list"

voucher_no = generatedVouchers.Add(voucher); //它在这行中给我错误

    static Random random = new Random();
    public ActionResult RandomVouchers()
    {

        int vouchersToGenerate = 1;
        int lengthOfVoucher = 10;


        List<string> voucher_no = new List<string>();

        List<string> generatedVouchers = new List<string>();
        char[] keys = "ABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890".ToCharArray();

        while (generatedVouchers.Count < vouchersToGenerate)
        {
            string voucher = GenerateVoucher(keys, lengthOfVoucher);
            if (!generatedVouchers.Contains(voucher))
            {
            voucher_no=   generatedVouchers.Add(voucher);//it is giving me error in this line

            }
        }
        return View(voucher_no);
    }
    private static string GenerateVoucher(char[] keys, int lengthOfVoucher)
    {

        return Enumerable
            .Range(1, lengthOfVoucher) // for(i.. ) 
            .Select(k => keys[random.Next(0, keys.Length - 1)])  // generate a new random char 
            .Aggregate("", (e, c) => e + c); // join into a string
    }

2 个答案:

答案 0 :(得分:4)

List<T>.Add不返回值,返回类型为void,因此您无法将此方法调用的结果分配给任何内容。

此外,没有理由同时拥有voucher_nogeneratedVouchers。删除其中一个,在下面的重构代码中,我删除了voucher_no

就您的列表而言,请不要使用List<T>,而是使用HashSet<T>,以便在循环内检查列表中的重复项,因为代码数量更有效你想要增加。

public ActionResult RandomVouchers()
{
    int vouchersToGenerate = 1;
    int lengthOfVoucher = 10;

    void generatedVouchers = new HashSet<string>();
    char[] keys = "ABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890".ToCharArray();

    while (generatedVouchers.Count < vouchersToGenerate)
    {
        string voucher = GenerateVoucher(keys, lengthOfVoucher);
        if (!generatedVouchers.Contains(voucher))
        {
            generatedVouchers.Add(voucher);
        }
    }
    return View(generatedVouchers);
}

另请参阅此内容作为如何生成随机代码的参考:How can I generate random alphanumeric strings in C#?

答案 1 :(得分:1)

您正在尝试将void函数(.Add)均衡为字符串列表。 Add函数返回什么,但你假设它确实如此。这就是你得到错误的原因。你应该这样做

voucher_no.Add(voucher);
generatedVouchers.Add(voucher);
相关问题