2014-05-15 1 views
-5

새 제품을 만들 때마다 고유 한 ID가 필요합니다.Guid는 매번 동일한 ID를 생성합니다. C#

내 코드는 동일한 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(); 

}  
+3

GUID의 기본값입니다. 이것은'Guid.Empty'입니다. 그것 [문서]에서 (http://msdn.microsoft.com/en-us/library/system.guid.aspx); _ 값이 모두 0 인 Guid 구조체의 읽기 전용 인스턴스입니다. 새 GUID를 초기화하는 위치는 –

+0

입니까? – Hassan

+0

왜 모든 투표가 내려 졌습니까? 질문의 주제는 초보자에게 가치가 있습니다. 그렇다면 무엇입니까? 질문은 명확하게 제시되므로 +1. – phoog

답변

14

새 고유 GUID를 만들 때마다 Guid.NewGuid()을 호출해야합니다.

Guid의 기본값은 Guid.Empty이며 모든 값은 0입니다.

2

Guid를 클래스 생성자에 전달하거나 객체 이니셜 라이저를 통해 전달하지 않습니다.

는 수행

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

필드 00000000-0000-0000-0000-000000000000는 가이 드의 기본값입니다 클래스에 기본 값이 할당됩니다.

당신이 가이 드 등 3 개 매개 변수를 클래스 생성자를 가지고 있기 때문에, 당신은 그와 같은 사용할 수 있습니다

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

답장을 보내 주셔서 감사합니다. 내 클래스 생성자에게 Guid를 추가하는 방법을 보여 주시겠습니까? – Diana

+0

Guid, Name 및 Price를 사용하기 위해 오버로드 된 생성자가 있습니다.이 코드를 사용하여 답변을 업데이트했습니다. – Habib

2

당신은 심지어 Guid를 생성하지 않았다, 그래서 기본값 모든 time.Use을 얻는다 Guid.NewGuid()Guid을 생성하는 방법.

관련 문제