gpt4 book ai didi

c# - 有没有办法只在 C# 中设置一次属性

转载 作者:IT王子 更新时间:2023-10-29 03:44:28 29 4
gpt4 key购买 nike

我正在寻找一种允许 C# 对象中的属性只设置一次的方法。编写代码来执行此操作很容易,但我宁愿使用一种标准机制(如果存在的话)。

public OneShot<int> SetOnceProperty { get; set; }

我想要发生的是,如果尚未设置该属性,则可以对其进行设置,但如果之前已设置,则抛出异常。它的功能应该类似于 Nullable 值,我可以在其中检查它是否已设置。

最佳答案

.NET 4.0 中的 TPL 对此有直接支持;

(编辑:上面的句子是在预期 System.Threading.WriteOnce<T> 的情况下写的,它存在于当时可用的“预览”位中,但这似乎在 TPL 达到 RTM/GA 之前就消失了)

在那之前,你自己检查一下......根据我的内存,行数不多......

类似于:

public sealed class WriteOnce<T>
{
private T value;
private bool hasValue;
public override string ToString()
{
return hasValue ? Convert.ToString(value) : "";
}
public T Value
{
get
{
if (!hasValue) throw new InvalidOperationException("Value not set");
return value;
}
set
{
if (hasValue) throw new InvalidOperationException("Value already set");
this.value = value;
this.hasValue = true;
}
}
public T ValueOrDefault { get { return value; } }

public static implicit operator T(WriteOnce<T> value) { return value.Value; }
}

然后使用,例如:

readonly WriteOnce<string> name = new WriteOnce<string>();
public WriteOnce<string> Name { get { return name; } }

关于c# - 有没有办法只在 C# 中设置一次属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/839788/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com