2010-08-04 62 views
12

Dưới đây là phương pháp của tôi:C# 4.0 Tham số tùy chọn - Cách chỉ định tham số tùy chọn loại "hướng dẫn"?

public void SomeQuery(string email = "", Guid userId = Guid.Empty) 
{ 
    // do some query 
} 

userId được đem lại cho tôi một lỗi như nó phải là một thời gian biên dịch không đổi, mà tôi hiểu được. Nhưng ngay cả khi tôi tuyên bố một const:

private const emptyGuid = Guid.Empty; 

sau đó thay đổi chữ ký phương pháp để:

public void SomeQuery(string email = "", Guid userId = emptyGuid) 
{ 
    // do some query 
} 
vẫn

không có tình yêu.

Tôi đang thiếu gì?

+0

trùng lặp có thể xảy ra của [Làm thế nào tôi có thể mặc một tham số để Guid.Empty trong C#?] (Https://stackoverflow.com/question/5117970/how-can-i-default-a-tham số-to-guid-empty-in-c) –

Trả lời

20

Các bạn đã thử cài đặt nó vào một trường hợp mới của Guid ala:

public void SomeQuery(string email = "", Guid userId = new Guid()) 
{ 
    // do some query 
} 

Nên làm các trick.

+0

Vậy đó. Chúc mừng! – RPM1984

+0

@ RPM1984 Rất vui khi được nghe! –

+3

Điều tốt về phương pháp này là bạn vẫn có thể kiểm tra nó bằng cách sử dụng Guid.Empty trong mã của bạn. ví dụ. nếu (userId == Guid.Empty) {...} –

2

Chẳng phải giải pháp tốt hơn là quá tải phương pháp với phiên bản không yêu cầu Hướng dẫn phải không? Điều này sẽ giải quyết vấn đề, và sẽ là một thiết kế tốt hơn theo ý kiến ​​của tôi. Tất nhiên, có thể có những hạn chế khác mà tôi không biết về việc cần thiết thiết kế này.

+0

Toàn bộ các điểm của C# 4 Các tham số tùy chọn là để tránh quá tải không cần thiết. Tôi có khoảng 7 tham số mà tôi đang lọc theo (trong một truy vấn LINQ), tại sao quá tải một phương thức 7 lần với cùng một mã? Tôi đoán đó là 'những ràng buộc khác' mà bạn đề cập đến. =) – RPM1984

+1

cho 2 đối số là tốt hơn để có 2 phương thức quá tải hơn tùy chọn parametrs IMO. Chủ yếu là cho thiết kế như mySuperObject.Add (ref một, ref hai, ref ba, ref bốn, ref năm) vs mySuperObject.Add(); –

2

có thể nó sẽ giúp (sử dụng toán tử ?? và các Guid loại nullable)

public void some_method(string name, Guid? guid = null) 
{ 
     _name = name; 
     _guid = guid ?? Guid.NewGuid(); 
} 
+0

hi, nếu tôi thử điều này tôi nhận được một tin nhắn (gần dịch): Một giá trị của Type '' kann không được sử dụng như là tham số chuẩn, vì không có biến đổi tiêu chuẩn thành "System.Guid" – Offler

Các vấn đề liên quan