c# - 为什么价值不想改变?
问题描述
我得到了一部分代码来保存游戏变量。
该Var
结构是一个简单的结构:
struct Var{
/// <summary>
/// Name of variable. Unchangable
/// </summary>
public string Name { get; private set; }
/// <summary>
/// Value of variable. Can be changed via <see cref="Change(string)"/>.
/// </summary>
public string Value { get; private set; }
public Var(string s, string value) {
this.Name = s;
this.Value = value;
}
public void Change(string v) {
new Debug("b", $@"Changing value from ""{Value}"" to ""{v}""", Debug.Importance.ERROR);
this.Value = v;
new Debug("b", $@"Result: ""{Value}""", Debug.Importance.ERROR);
}
}
(new Debug(string, string, Debug.Importance)
是一个简单地在每个文件中调用的Conosle.WriteLine()
函数using System
)
类GameVars
是这些的列表。
我使用索引器来获取Var
使用变量的值。
public string this[string s] {
get => vars.Find(e => e.Name == s).Value;
set {
new Debug("a", $@"Attempt to change value of ""{s}"" to ""{value}"".", Debug.Importance.ERROR);
if( vars.Find(e => e.Name == s).Name != null )
vars.Find(e => e.Name == s).Change(value);
else
vars.Add(new Var(s, value));
new Debug("a", $@"Result: ""{this[s]}""", Debug.Importance.ERROR);
}
}
当GameVars.LoadFromFile(string s)
我使用
this[ident] = value;
new Debug("", $"When do i Fire? {this[ident]}", Debug.Importance.ERROR);
if( this[ident] != value )
throw new System.Exception("Could not change value!");
我得到以下输出:
[ERROR]( a ) Attempt to change value of "version" to "beta 0.0.0.1".
[ERROR]( b ) Changing value from "beta 0.0.0..1" to "beta 0.0.0.1"
[ERROR]( b ) Result: "beta 0.0.0.1"
[ERROR]( a ) Result: "beta 0.0.0..1"
[ERROR]( ) When do i Fire? beta 0.0.0..1
Exception thrown: 'System.Exception' in ITW.exe
An unhandled exception of type 'System.Exception' occurred in ITW.exe
Could not change value!
为什么价值没有变化?
我尝试将所有内容更改为公开,但没有任何帮助。我检查了一切,Console.WriteLine()
没有什么可以覆盖这个值。它只是不会更改为新的。
解决方案
@wimh 想通了:
.Find()
与结构一起使用会返回副本并且不会更改原始文件。小提琴
谢谢
修复它的代码,但Var
仍然是一个结构:
vars[vars.FindIndex(e => e.Name == s)] = new Var(s, value);
代替
vars.Find(e=>e.Name==s).Change(value);
我摆脱了它,Var.Change
因为它不再有用了。
推荐阅读
- r - 通过计算将行添加到特定列
- firebase - 在抛出结果firestore之前等待回调运行
- git - “致命:身份验证失败”与 git-credential-manager
- javascript - 如何使用“ref”属性-EXTJS从父组件访问子组件
- html - 如何将计数器添加到表格顶部而不是底部
- reactjs - 动态 Redux 表单和 MaterializeCSS DatePicker - 如何获取输入的 event.target.name?
- reactjs - 中继棱镜 graphql 更新存储
- java - How to execute sudo commands in Java and get error output?
- python - python中的字母位置
- amazon-s3 - 在 ubuntu 16 上使用 s3fs 自动挂载 S3