在 C# 中,只有当 class 属性 不存在时,我如何才能生成一个值?

In C#, how can I generate a value for a class property only if there isn't one?

我有以下 C# class 和 属性 Id 我想用 GUID 和 return 如果消费者调用尚未设置此值的 myClass.Id 实例的值,否则保持 return 现有值。

public class IdentifiableClass{
   public string Id {
          get { 
                if (this.Id == null) {
                    this.Id = Guid.NewGuid().ToString();
                    Console.WriteLine("########## Id : " + this.Id );
                }
                return this.Id;
            }
            set => this.Id = value;
   }
}

C# 中,这 没有 工作,但我得到一个 Whosebug (显然不是这个网站)。 最好的猜测是,在同一个 属性 的 getter 中调用 this.Id 似乎会导致循环逻辑。

Salesforce Apex 中,使用此类似 代码,它 的工作方式与I 会期望它,将 this.Id 的值评估为 null,将值分配给新的 Guid,显示值,然后 returning 值:

public class IdentifiableClass {
   public string Id {
          get { 
                if (this.Id == null) {
                    this.Id = String.valueOf(Integer.valueof((Math.random() * 10)));
                    System.debug('########## Id : ' + this.Id );
                }
                return this.Id;
            }
            set;
   }
}

你需要做的是不要使用自动属性功能。

您应该明确地放置 private string _id; 字段并且您的 getter 和 setter 应该在内部使用那个

也许你应该创建完整的 属性 私有字段。

public class IdentifiableClass{
   private string id;
   public string Id {
          get { 
                if (this.id == null) {
                    this.id = Guid.NewGuid().ToString();
                    Console.WriteLine("########## Id : " + this.id );
                }
                return this.id;
            }
            set => this.id = value;
   }
}