我有一些資料存盤在字典中,其中的值基本上是一個包含很少屬性的物件串列。現在我正在回圈如下以獲取存盤在特定屬性中的資料。然后將這些資料添加到下拉串列中(unity UI 下拉串列)
foreach (KeyValuePair<string, List<NameIDValuePair>> kvp in TeamValuePair)
{
List<NameIDValuePair> list = kvp.Value;
if(kvp.Key == teamNames.options[teamNames.value].text)
{
foreach (var rec in list)
{
screenNamesDropDown.options.Add(new TMP_Dropdown.OptionData { text = rec.ScreenName });
}
}
}
teamNames 和 screenNamesDropDown 是我的統一 UI 的下拉元素的一部分。
NameIdValuePair 的結構如下所示:
public class NameIdValuePair
{
public string ScreenName { get; private set; }
public string ScreenId { get; private set; }
}
我想使用 linq 以更好的方式優化這段代碼 - 使其更具可讀性。由于我對 linq 還很陌生,因此我不確定在搜索建議時是否使用了正確的關鍵字,但到目前為止,我在找到任何有用的建議方面還沒有取得太大的成功。
謝謝
uj5u.com熱心網友回復:
如前所述,而不是回圈 a Dictionary- 我們已經知道鍵是唯一的 - 你可以簡單地使用Dictionary.TryGetValue
// do this only once!
var key = teamNames.options[teamNames.value].text;
if (TeamValuePair.TryGetValue(key, out var list))
{
foreach(var item in list)
{
screenNamesDropDown.options.Add(new TMP_Dropdown.OptionData(item.ScreenName));
}
}
然后實際上是唯一可以使用 Linq 的地方,如果您真的想的話,可能就在
var key = teamNames.options[teamNames.value].text;
if (TeamValuePair.TryGetValue(key, out var list))
{
screenNamesDropDown.options.AddRange(list.Select(item => new TMP_Dropdown.OptionData(item.ScreenName)));
}
不過,這是否能讓閱讀變得更好是值得懷疑的。
一般來說,問題還在于您是否總是想要Add( AddRange)screenNamesDropDown.options或者您是否想要真正替換這些選項。然后,而不是AddRange你可以做
screenNamesDropDown.options = list.Select(item => new TMP_Dropdown.OptionData(item.ScreenName)).ToList();
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/329225.html
下一篇:AR.js影片沒有初始化
