Если вы посмотрите исходный код конструктора Guid(string) в исходном коде .NET 4.5.2, то он выглядит следующим образом:
public Guid(String g)
{
if (g==null) {
throw new ArgumentNullException("g");
}
Contract.EndContractBlock();
this = Guid.Empty;
GuidResult result = new GuidResult();
result.Init(GuidParseThrowStyle.All);
if (TryParseGuid(g, GuidStyles.Any, ref result)) {
this = result.parsedGuid;
}
else {
throw result.GetGuidParseException();
}
}
Вопрос в том, какова цель линии this = Guid.Empty;?
Из того, что я могу увидеть, если string g можно успешно проанализировать в методе TryParseGuid, тогда будет назначен this. Если он не может, тогда будет выбрано исключение.
Предположим, вы написали:
var guid = new Guid("invalidguid");
Это приведет к исключению, и значение guid будет undefined, я бы предположил. Итак, почему необходимо назначить this - Guid.Empty?