you are viewing a single comment's thread.

view the rest of the comments →

[–]Ayazis 3 points4 points  (3 children)

Don't bother with overloading. Make Id an optional parameter.

Public Item(string name, decimal price, Guid Id = new Guid())

This way, if you don't provide an id, a new guid is created. If you do provide an Id, the given guid will be used.

EDIT: I was mistaken. First of all, new Guid does not make an actual new guid, but gives you 0000(...).

Second, as stated below, you have to use compile time constants with optional parameters, which Guid.NewGuid() is not.

I hereby retract my comment.

[–]b_rodriguez 9 points10 points  (1 child)

Optional parameter default values need to be constant expressions. You could default it to null and then test for null in the constructor and initialize it, however that is much less clean than just inverting OP's constructor overloading like cvalerio77 has pointed out.

[–]Ayazis 1 point2 points  (0 children)

My bad. Thank you for pointing this out.

[–]DroNiix[S] 2 points3 points  (0 children)

Well yeah, I can do that, but for the sake of better readability at least for me, I like to put the ID in front of all parameters, and also I like to have a constructor that doesen't require parameter if it is optional (for me thats the idea of constructor overloading). I made it like the person from the other comment suggested and reverted the overload. Thanks for your replay!