使用 Linq 替换集合项
在下面的特定场景中,如何使用 Linq 查找并替换属性:
public interface IPropertyBag { }
public class PropertyBag : IPropertyBag
{
public Property[] Properties { get; set; }
public Property this[string name]
{
get { return Properties.Where((e) => e.Name == name).Single(); }
//TODO: Just copying values... Find out how to find the index and replace the value
set { Properties.Where((e) => e.Name == name).Single().Value = value.Value; }
}
}
感谢您提前提供帮助。
How do I find and replace a property using Linq in this specific scenario below:
public interface IPropertyBag { }
public class PropertyBag : IPropertyBag
{
public Property[] Properties { get; set; }
public Property this[string name]
{
get { return Properties.Where((e) => e.Name == name).Single(); }
//TODO: Just copying values... Find out how to find the index and replace the value
set { Properties.Where((e) => e.Name == name).Single().Value = value.Value; }
}
}
Thanks for helping out in advance.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
不要使用 LINQ,因为它不会改进代码,因为 LINQ 旨在查询集合而不是修改它们。 我建议如下。
为什么是 Array.Sort() 和 Array.IndexOf() 方法静态?
此外,我建议不要使用数组。 考虑使用
IDictionary
。 这将代码简化为以下内容。请注意,这两种解决方案都不是线程安全的。
一种临时 LINQ 解决方案 - 您看,您不应该使用它,因为整个数组将被新数组替换。
Do not use LINQ because it will not improve the code because LINQ is designed to query collection and not to modify them. I suggest the following.
Why are Array.Sort() and Array.IndexOf() methods static?
Further I suggest not to use an array. Consider using
IDictionary<String, Property>
. This simplifies the code to the following.Note that neither solution is thread safe.
An ad hoc LINQ solution - you see, you should not use it because the whole array will be replaced with a new one.
[注意:这个答案是由于对问题的误解 - 请参阅对此答案的评论。 显然我有点笨:(]
您的“属性”是类还是结构?
这个测试对我来说通过了:
我想知道为什么 getter 返回一个“Property”而不是任何数据类型 .Value,但我仍然很好奇为什么你看到的结果与我的结果不同。
[note: this answer was due to a misunderstanding of the question - see the comments on this answer. Apparently, I'm a little dense :(]
Is your 'Property' a class or a struct?
This test passes for me:
I have to wonder why the getter returns a 'Property' instead of whatever datatype .Value, but I'm still curious why you're seeing a different result than what I am.