Tag: 语言无关

在for循环声明中初始化变量的范围实际上不仅仅是块范围吗?

考虑带有计数器的for循环: for (int i = 0; i < 100; i++ /* `i` is visible here */) { /* `i` is visible here */ } /* `i` not visible here */ 一切都很好。 我们说i有“阻止”范围。 但是,为什么在i++中无法访问在for循环中声明的变量? 例如,为什么j不在此范围内,当它还具有“阻止”范围并且在i += j之前的时间段内声明? for (int i = 0; i < 100; i += j /* only `i` is visible here */) { […]

使用DateTime.Now有什么问题。 作为唯一ID的主要部分?

我曾经使用RNGCryptoServiceProvider来生成基于字符串的订单ID,但是,有4个实例,其中ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@$%^*()_-将生成已存在的订单ID。 它让我思考…… 为什么我们不能只使用以下内容: … @GenerateOrderId() … 和: public string GenerateOrderId() { return “OID” + DateTime.Now.Year + DateTime.Now.Month + DateTime.Now.Day + DateTime.Now.Hour + DateTime.Now.Minute + DateTime.Now.Second + DateTime.Now.Millisecond; } 我被告知这是一个坏主意,但没有任何解释或理由,它仍然在我脑海中。 …我之所以要使用它,是因为它永远是独一无二的。

有效地生成随机数

你如何有效地生成随机数? 每次随机数程序启动时,它都会像以前一样开始吐出相同的数字。 (我猜是因为随机数生成的准性质) 有没有办法,随机#生成变得不确定? 除了生成之外,引入后生成的数字与最后一个序列的顺序不同。 (随机随机而非准随机) 此外,例如,这种生成的范围是(m,n)使得nm = x,在生成x-1个其他数之后,有可能下次出现数字’p’。 但是接下来很多这样的x数字与最后一个数字的序列不同。 例: 范围:1,5。 代:2,4,5,1,3(第一)4,2,3,1,5(第二)……相同的数字。 我出于困惑的心态写下了这个: int num1 = (rand.Next(1, 440) *31* (int)DateTime.Now.Ticks *59* (DateTime.Now.Second * 100) % 439) + 1; int num2 = (rand.Next(1, 440) *31* (int)DateTime.Now.Ticks *59* (DateTime.Now.Second * 100) % 439) + 1; 这里的范围是(1,440)。 但是它仍然会产生超出界限和零的数字,而且它的频率也不是那么好。 它是C#.NET代码。 为什么这样? 你的答案可以是语言不可知/算法/分析。 提前致谢。