c# - C# 标准库是否有用于存储可变值的泛型类?

标签 c# .net mutable standard-library

我需要一个类来存储可变值。当此类的实例在代码的不同部分之间共享并且其中一部分更改了该对象内的值时,所有其他部分都会看到新值。

这题不是我能写的。这是给任何搜索的人的:

public class ValueHolder<T> { public T Value { get; set; } }

我的问题是,这个类是否存在于标准库中的任何地方?这感觉像是会包含在它提供的许多小类中的东西。

或者,是否有另一种方法可以在不让我的代码中散布小类的情况下实现所需的结果?

更新/评论:
我对这个问题提出的消极情绪感到有点惊讶。
“这会导致 WTF 计数很高!” “你在重新发明!”

reshape 是我在问这个问题时明确要避免的事情。如果标准库中已经有一些东西,我可以使用它而不是编写一个新类。 (只要 yield 大于成本。)

传递对象并允许对其进行修改的技术一直被使用。您是否曾经编写过一个接受 List 的函数,以便该函数添加/删除值?允许事件处理程序通过在事件参数对象中设置值来更改正在进行的事件的事件处理程序(例如 Form.Closing)怎么样?

在我的例子中,对象只是一个包含单个 bool 值的类。它被传递到另一段代码中,以允许升高或降低该标志。你可能会说这应该是一个函数的返回值或一个 ref 参数,但我使用的框架允许将对象传递给处理程序(类似于 ParameterizedThreadStart 或 Tag 属性)所以我在我的范围内受到限制可以绕过去。

“我想知道标准库是否已经有一个类可以做到这一点。”我心想。 “让我们找出答案!”

最佳答案

这是我的 VolatileRef 类。

当我需要通过引用传递一个 volatile 变量时,我会使用它。

如果您不关心波动性,只需删除 volatile 关键字并将类重命名为 Ref

public class VolatileRef
{
    private volatile object payload;

    public VolatileRef( object payload )
    {
        this.payload = payload;
    }

    public object Payload { get => payload; set => payload = value; }
}

public class VolatileRef<T> : VolatileRef
{
    public VolatileRef( T payload )
            : base( payload )
    { }

    public new T Payload { get => (T)base.Payload; set => base.Payload = value; }
}

关于c# - C# 标准库是否有用于存储可变值的泛型类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30662910/

相关文章:

c# - 将泛型与 XmlSerializer 结合使用

c# - 在 WinRT 的默认 Web 浏览器中打开 URL

.net - 如何在 Linux 服务器上部署 .NET 项目(Webmin)

python - Python 列表是可变的吗?

f# - 使用 F# 的 `ref` 与 `mutable` 赋值运算符

c# - 文件流到字节 [] : Windows XP vs Windows 8

c# - 有没有办法从预编译的 C# Azure Functions 自动生成 Swagger 标签?

.net - 有没有一种方法可以在不影响 .NET 中底层响应流的情况下检查 WebResponse?

c++ - 函数返回值的可变性测试

c# - asp.net web 控件的公共(public)属性保存在哪里?