c# - 如何派生引用时生成的对象并仍然更新基础?
问题描述
我知道这个问题不是很清楚,我什至不知道可以用什么词来描述我正在尝试做的事情,但这个例子应该更清楚。
说这段代码
public string Underscores;
public string Spaces
{
get => Underscores.Replace('_', ' ');
set => Underscores = value.Replace(' ', '_');
}
在此示例中,Underscores 的值存储在内存中,但 Spaces 的值不是,而是在引用时动态生成。如果 Spaces 的值发生变化,Underscored 的值也会相应变化。我想做的是将这个概念扩展到结构和类:
struct StringStruct
{
public string Value { get; set; }
}
...
public string Underscores;
public StringStruct Spaces
{
get => new StringStruct { Value = Underscores.Replace('_', ' ') };
set => UnderScores = value.Value.Replace(' ', '_') };
}
如果我用新的 StringStruct 覆盖 Spaces,它可以正常工作,但是尝试更改 Space 的 Value 属性的值会导致编译器错误,因为它不是变量。相同的场景,但 StringStruct 是一个类不会导致错误,但更改将被忽略,并且下划线将保持不变。
这些例子是为了解释而编造的,而不是我真正想要做的。
解决方案
您的代码中的value
andUnderscores
不是字符串,而是StrigStruct
. 所以你不能string.Replace()
在他们身上调用方法。
这将解决您的问题。
public StringStruct Underscores;
public StringStruct Spaces
{
get => new StringStruct { Value = Underscores.Value.Replace('_', ' ') };
set => Underscores = new StringStruct { Value = value.Value.Replace(' ', '_') };
}
编辑
在 OP 用新信息编辑帖子之后。
您收到错误的原因是因为Cannot modify the return value of 'expression' because it is not a variable
您使用的是 a而不是 a ,因为它不是与 a 不同的引用类型。请在此处阅读更多内容。struct
StringStruct
class
struct
class
推荐阅读
- javascript - 如何通过buttonclick事件禁用特定的href链接
- c++ - 怎么修
错误:无法从“初始化列表”转换为 asdendingCompare (模板函子) - node.js - 如何从所有集合中获取信息,但仅获取数组项
- java - 可以让.exe文件在mose不移动的情况下自动运行吗?
- html - 本地 html 文件是否将其文件路径作为引用者发送?
- shell - 是否有一个查找命令显示某个用户已读取权限的当前目录中的文件?
- docker - NGinx 和多个 docker 容器,但只有一个子域
- algorithm - 如何从数据集进行模拟?
- javascript - 错误的偏移量();在火狐上
- variables - Orange3 Python 小部件我无法汇总标记为元的列的值