在 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;
}
}
- 是否可以在 C# 中实现此功能?
- 如果是,如何?
你需要做的是不要使用自动属性功能。
您应该明确地放置 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;
}
}
我有以下 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;
}
}
- 是否可以在 C# 中实现此功能?
- 如果是,如何?
你需要做的是不要使用自动属性功能。
您应该明确地放置 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;
}
}