可能重复:
随机数生成器仅生成一个随机数
我的工作中有一个方法,它通过在一组单词之间随机选择产生一个句子,如下所示:
private string generateTest(string test)
{
test = test.ToLower();
string sentence = "";
for (int c = 0; c < 30; c++)
{
Random r = new Random();
int len = r.Next(3, 7);
string word = "";
for (int i = 0; i < len; i++)
{
word += test[r.Next(0, test.Length)];
}
sentence += word + ' ';
}
return sentence;
}
Run Code Online (Sandbox Code Playgroud)
然而,问题在于,在随机生成前6个单词之后,所有后续代都完全相同.例如
aqaaaz,qqzaq,aqqza,azqq,aazzq,aqqa,azzzq,azzzq,azzzq,azzzq,azzzq,azzzq,azzzq,azzzq,azzzq,azzzq,azzzq,azzzq,azzzq,azzzq,azzzq,azzzq,azzzq,azzzq,azzzq. ...
然后,即使我重新启动程序,同样的事情也适用.我在想这是.NET Runtime做一些自动优化.谁能解释得更好?我该如何解决这个问题?
今天我遇到了一个惊人的问题,我试图找到一个对象是否包含在List集合中.问题是列表找不到对象,并且当我可以在那里看到它时将index返回-1.然后我创建了一个自定义索引查找器,通过比较属性而不是直接相等来查找对象,我发现对象的一个属性,一个相同的ushort数组在比较时返回false,但它们包含完全相同的元素.
数组如下:
{ushort [1]} [0] 13
它们两者完全相同,只是其中一个对象包含在List中,而另一个对象在它自己的上面.可能是造成这个问题的原因是什么?我已经尝试了所有类型的不同方法来解决问题,但我不能弄清楚问题是什么.在这种特殊情况下,导致两个数组之间的比较返回false的原因是,我使用Object.equals和普通==比较器一样使用.谢谢
我试图想出一种在C#中的Windows窗体中制作非矩形按钮的方法.我一直在寻找这个,并且有很多教程(包括微软自己的文档)关于如何使按钮外观非矩形,但是 - 这很关键 - 它们都没有做任何关于制作按钮的活动区域的事情非矩形.例如,如果您创建一个椭圆形按钮,则边界矩形的角仍然是用于拾取鼠标事件(如翻转和点击)的内容.这对我的需求是不可接受的.我需要在彼此相邻的地方放置几个奇形状的按钮,它们的边界可能会重叠,但它们只应对按钮图形可见部分内的点击做出响应.我已经看到了其他几种语言(主要是Objective-C)的几个问题,但C#没有.Winforms甚至可以实现这一点吗?
我从MSDN示例中获得以下代码:
if (sheetData.Elements<Row>().Where(r => r.RowIndex == rowIndex).Count() != 0)
{
row = sheetData.Elements<Row>().Where(r => r.RowIndex == rowIndex).First();
...
Run Code Online (Sandbox Code Playgroud)
我重构如下:
Dictionary<uint, Row> rowDic = sheetData.Elements<Row>().ToDictionary(r => r.RowIndex.Value);
if (rowDic[rowIndex].Count() != 0)
{
row = rowDic[rowIndex];
...
Run Code Online (Sandbox Code Playgroud)
现在,我感觉如果Enumerable.ToDictionary <>方法实际上必须枚举所有数据,那么这也是多余的,但MSDN文档没有说明如何进行这种转换.
我正在考虑使用的替代方案是:
var foundRow = sheetData.Elements<Row>().Where(r => r.RowIndex == rowIndex);
if (foundRow.Count() != 0)
{
row = foundRow.First();
...
Run Code Online (Sandbox Code Playgroud)
但是,我想知道以前的经验可能更快,为什么.
谢谢.