簡體   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