[英]generating random numbers in asp.net
我想生成10位字母数字代码的凭证,错误是“无法将'void'隐式转换为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
}
List<T>.Add
不返回值,其返回类型为void
因此您无法将此方法调用的结果分配给任何对象。
同样没有理由同时拥有voucher_no
和generatedVouchers
。 删除其中之一,在下面的重构代码中,我删除了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);
}
另请参见,以作为如何生成随机代码的参考: 如何在C#中生成随机字母数字字符串?
您正在尝试将void函数( .Add
)均衡为字符串列表。 Add
函数不返回任何内容,但您假设会这样做。 这就是为什么您得到错误。 你应该这样
voucher_no.Add(voucher);
generatedVouchers.Add(voucher);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.