[英]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.