我是新人和C#。我想在文本框中自动生成一个唯一的数字,我可以将其用作进行资产注册的表单的参考编号。此参考编号将用作注册的每个资产的唯一标识符,并且还会提供给资产所有者以供参考。
答案 0 :(得分:8)
为此,您可以使用Guid(全局唯一标识符)新Guid的值全部为零或等于任何其他Guid的可能性非常低。
public static void Main()
{
Guid g = Guid.NewGuid();
Console.WriteLine(g);
}
你可以在这里找到更多相关信息:
http://msdn.microsoft.com/en-us/library/system.guid.newguid(v=vs.110).aspx
答案 1 :(得分:1)
您可以使用Guid。
Guid temp;
temp = Guid.NewGuid();
textBox1.Text = temp.ToString().Replace("-", "");
但请注意。真正独特的数字生成是不可能的。
还有其他方法,如Random
类
答案 2 :(得分:1)
您是否考虑过使用GUID,它们很容易生成并且相当独特?
// This code example demonstrates the Guid.NewGuid() method.
using System;
class Sample
{
public static void Main()
{
Guid g;
// Create and display the value of two GUIDs.
g = Guid.NewGuid();
Console.WriteLine(g);
Console.WriteLine(Guid.NewGuid());
}
}
/*
This code example produces the following results:
0f8fad5b-d9cb-469f-a165-70867728950e
7c9e6679-7425-40de-944b-e07fc1f90ae7
*/
答案 3 :(得分:0)
您可以将TimeStamp与新GUID一起使用。
string uniqueKey = string.Concat(DateTime.Now.ToString("yyyyMMddHHmmssf"), Guid.NewGuid().ToString());
如果你真的需要一个数字的字符串作为唯一键,那么你只能使用时间戳和下面的stratergy.then它将在任何给定的时间内唯一,Lock以确保没有两个线程同时运行你的代码。 Thread.Sleep确保您在十分之一秒内获得两个不同的时间。
static object lockerObject = new object();
static string GetUniqueKey()
{
lock (lockerObject)
{
return DateTime.Now.ToString("yyyyMMddHHmmssf");
Thread.Sleep(100);
}
}
或者我找到了一种方法,没有here的时间戳,如下所示。
public long GetUniqueKey()
{
byte[] buffer = Guid.NewGuid().ToByteArray();
return BitConverter.ToInt64(buffer, 0);
}