我有更新单个项目的问题,List<string>使用LINQ匹配不同的字符串.假设我有一个名单列表,我想检查名单"John"是否已存在于我的列表中.如果是,则将"John"替换为"Anna".
这是我做的:
var sItem = myList.First(n=> n == "John"); //I am 100% sure that John exists, that\s why I use .First
sItem = "Anna";
Run Code Online (Sandbox Code Playgroud)
这是它应该如何工作,但当我在进程后检查我的List(myList)时,原始项目仍然存在(我仍然可以看到John,而不是Anna).我也尝试在List上实现INotifyChanged,但仍然没有结果.
我究竟做错了什么?
Lee*_*Lee 15
如果您需要更新,请使用FindIndex:
int index = myList.FindIndex(n => n == "John");
myList[index] = "Anna";
Run Code Online (Sandbox Code Playgroud)
您正在将 linq 查询的结果分配给字符串变量。这不是列表的元素,而是一个也引用该列表的元素的变量。更改变量的值sItem将定义一个新字符串,该字符串将被 引用sItem,并且列表中的项目保持不变。
您可以使用FindIndex获取数组中元素的索引并使用它来引用列表元素。
int index = myList.FindIndex(n => n == "John");
myList[index] = "Anna";
Run Code Online (Sandbox Code Playgroud)
搜索与指定谓词定义的条件匹配的元素,并返回整个 List 中第一个匹配项的从零开始的索引。
编辑
当一个字符串变量被分配给另一个字符串变量时。它们都引用相同的字符串,但是当您将不同的字符串分配给第二个变量时,它们都引用不同的字符串。请参阅 Eric Lippert 的回答中的以下示例。
a----------------------Hello
Run Code Online (Sandbox Code Playgroud)
然后你说“b = a”,这意味着将另一段字符串附加到a附加到的同一事物上:
a----------------------Hello
/
b---------------------
Run Code Online (Sandbox Code Playgroud)
然后你说“现在将 b 附加到 Hi”
a----------------------Hello
b----------------------Hi
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6648 次 |
| 最近记录: |