【问题标题】:Guid produces same ID each time. C# [duplicate]Guid 每次都生成相同的 ID。 C# [重复]
【发布时间】:2014-07-03 22:39:51
【问题描述】:

每次创建新产品时,我都需要一个唯一的 ID。

我的代码创建相同的 Guid (00000000-0000-0000-0000-000000000000) 我将它添加到列表中的每个项目,它不是唯一的。

如果我在这段代码中做错了什么,请告诉我。这是我的代码。

class Product
{

    private Guid _ID ;
    private String _Name = string.Empty;
    private String _Price = string.Empty;

    public Guid ID
    {
        get { return _ID; }
        set { _ID = value; }
    }


    public string Name
    {
        get { return (_Name); }
        set { _Name = value; }
    }

    public string Price
    {
        get { return (_Price); }
        set { _Price = value; }
    }


    public Product(Guid ID, string Name, string Price)
   {
   _ID = ID;
   _Name = Name;
   _Price = Price;
   }

    public Product()
    {
        // TODO: Complete member initialization
    }


public static void Main()

{

    List<Product> productList = new List<Product>();
    productList.Add(new Product() { Name = "shoe", Price = "80"});
    productList.Add(new Product() { Name = "Hand Bag", Price = "180" });
    productList.Add(new Product() { Name = "Pen", Price = "8" });

    var cheapestItem = (from i in productList orderby i.Price descending select i.Name).Take(1);
    Console.WriteLine(cheapestItem);
    Console.ReadLine();

 }    

【问题讨论】:

  • 它是GUID 的默认值。这是Guid.Empty。来自documentationGuid 结构的只读实例,其值全为零。
  • 在哪里初始化新的 GUID?
  • 为什么所有的反对票?问题的题目值得一个新手,那又怎样?问题很清楚,所以+1。
  • 几个月前已经在您自己的问题中回答了:stackoverflow.com/questions/21433670/…
  • 请注意,由于Guidstruct,因此应该期望new Guid() 给出零值。这对于任何结构都是如此。

标签: c# guid


【解决方案1】:

您每次都需要调用Guid.NewGuid() 来创建一个新的唯一GUID。

Guid 的默认值是Guid.Empty,这就是您所看到的(全为 0)。

【讨论】:

    【解决方案2】:

    你连Guid都没有生成,所以每次都取默认值。使用Guid.NewGuid()方法生成Guid

    【讨论】:

      【解决方案3】:

      您没有将 Guid 传递给您的类构造函数或通过对象初始化程序。

      做:

       productList.Add(new Product() { ID = Guid.NewGuid(), Name = "shoe", Price = "80"});
      

      类中的字段被分配了默认值,00000000-0000-0000-0000-000000000000 是 Guid 的默认值。

      因为你有一个类构造函数,它接受三个参数,包括 Guid,你可以这样使用:

      productList.Add(new Product(Guid.NewGuid, "shoe", "80"));
      

      【讨论】:

      • 感谢您的回答。你能告诉我如何将 Guid 添加到我的类构造函数中吗?
      • 你有一个用于获取 Guid、Name 和 Price 的重载构造函数,使用它,我已经用代码更新了答案。
      猜你喜欢
      • 2012-05-01
      • 1970-01-01
      • 2013-12-10
      • 2019-09-24
      • 1970-01-01
      • 2021-11-03
      • 1970-01-01
      • 2019-08-30
      • 1970-01-01
      相关资源
      最近更新 更多