我想生成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
}
答案 0 :(得分:4)
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);
}
另请参阅此内容作为如何生成随机代码的参考:How can I generate random alphanumeric strings in C#?
答案 1 :(得分:1)
您正在尝试将void函数(.Add
)均衡为字符串列表。 Add
函数返回什么,但你假设它确实如此。这就是你得到错误的原因。你应该这样做
voucher_no.Add(voucher);
generatedVouchers.Add(voucher);