繁体   English   中英

替换struct c#数组中的值

[英]Replace value in an array of struct c#

我在 C# 中有以下公共结构:

public struct Route
{
    public float Start; 
    public float End; 
    public float Range; 
    public bool InConstruction; 
};

我想替换在另一个类 (Route[]) 中用作结构数组的每个属性 Range of Route。 我做了以下工作正常:

//dest.Route = new Route[]; 
for (var i = 0; i < dest.Route.Count; i++)
{
    dest.Route[i].Range = dest.Route[i].End - dest.Route[i].Start; 
}

有没有办法优化这个循环或只是其他方法来实现这个解决方案?

也许使用 desc.Route.Select(i => i.Range = i.End - i.Start); ?

如果你不能改变结构,那么不,你已经做了最优化的事情。 即使您确实使用 Linq 找到了一些解决方案,它最终也会像您一样归结为一个循环。

如果你死心塌地使用 Linq,你需要做这样的事情:

desc.Route = desc.Route.Select(d => {
    d.Range = d.End - d.Start;
    return d;
})
.ToArray();

我会让你来评判这对你的项目是否“更好”。 这确实违反了 Linq 的一些原则,主要是“不引起副作用”。

这个:

.Select(i => i.Range = i.End - i.Start)

不起作用(尽管它是合法的语法),因为赋值运算符返回已分配的值,因此您将仅选择分配给 Range 属性的浮点数,而不是完整的 Route 对象。 https://dotnetfiddle.net/jSKZlj


如果您可以更改结构:

如果Range始终End字段减去Start字段,那么您可以在需要读取 value 时计算它,而不是先发制人。 无耻地接受Etienne de Martel 的想法

public struct Route
{
    public float Start; 
    public float End; 
    public float Range => End - Start;
    public bool InConstruction; 
};

现在根本不需要进行循环计算。 读取Range属性后,将立即计算每个对象的值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM