C#将KeyValue设置为一行中的变量
是否有前3行代码的简短版本:C#将KeyValue设置为一行中的变量,c#,linq,syntactic-sugar,C#,Linq,Syntactic Sugar,是否有前3行代码的简短版本: foreach (var el in craftSystem.requiredItems) { var type = el.Key; var count = el.Value; var itemDefinition = ItemManager.GetItemDefinition(type); var go = Instantiate(prefab, ro
foreach (var el in craftSystem.requiredItems)
{
var type = el.Key;
var count = el.Value;
var itemDefinition = ItemManager.GetItemDefinition(type);
var go = Instantiate(prefab, root);
var line = go.GetComponent<UICraftItemRequirementLine>();
line.SetItem(itemDefinition, count);
}
foreach(craftSystem.requireItems中的变量)
{
变量类型=el.键;
var计数=el.值;
var itemDefinition=ItemManager.GetItemDefinition(类型);
var go=实例化(预置,根);
var line=go.GetComponent();
line.SetItem(itemDefinition,count);
}
要设置suitables变量名,如上面的示例中的type、count
我知道代码看起来很好,可读性好,而且可以更简单,因为我只使用了一次变量。但是我需要知道如何把它放在一行中(见答案)。你可以写:
var go = Instantiate(prefab, root);
var line = go.GetComponent<UICraftItemRequirementLine>();
line.SetItem(ItemManager.GetItemDefinition(el.Key), el.Value);
var go=实例化(预置,根);
var line=go.GetComponent();
line.SetItem(ItemManager.GetItemDefinition(el.Key)、el.Value);
但调试起来会更困难(请参阅上面@Corak的评论)您可以这样写:
var go = Instantiate(prefab, root);
var line = go.GetComponent<UICraftItemRequirementLine>();
line.SetItem(ItemManager.GetItemDefinition(el.Key), el.Value);
var go=实例化(预置,根);
var line=go.GetComponent();
line.SetItem(ItemManager.GetItemDefinition(el.Key)、el.Value);
但是调试起来会比较困难(请参见上面@Corak的评论)您的代码看起来很简单,但只有为了您的问题,您才能解构键值对
foreach ((var type, count) in requiredItems.Select(pair => (pair.Key, pair.Value)))
{
var itemDefinition = ItemManager.GetItemDefinition(type);
var go = Instantiate(prefab, root);
var line = go.GetComponent<UICraftItemRequirementLine>();
line.SetItem(itemDefinition, count);
}
requireItems中的foreach((变量类型,计数)。选择(pair=>(pair.Key,pair.Value)))
{
var itemDefinition=ItemManager.GetItemDefinition(类型);
var go=实例化(预置,根);
var line=go.GetComponent();
line.SetItem(itemDefinition,count);
}
您的代码看起来很简单,但只有为了回答您的问题,才可以解构键值对
foreach ((var type, count) in requiredItems.Select(pair => (pair.Key, pair.Value)))
{
var itemDefinition = ItemManager.GetItemDefinition(type);
var go = Instantiate(prefab, root);
var line = go.GetComponent<UICraftItemRequirementLine>();
line.SetItem(itemDefinition, count);
}
requireItems中的foreach((变量类型,计数)。选择(pair=>(pair.Key,pair.Value)))
{
var itemDefinition=ItemManager.GetItemDefinition(类型);
var go=实例化(预置,根);
var line=go.GetComponent();
line.SetItem(itemDefinition,count);
}
或者您可以重新格式化如下:
craftSystem.requiredItems.ToList().ForEach(el =>
{
var itemDefinition = ItemManager.GetItemDefinition(el.Key);
var go = Instantiate(prefab, root);
var line = go.GetComponent<UICraftItemRequirementLine>();
line.SetItem(itemDefinition, el.Value);
});
craftSystem.requiredItems.ToList().ForEach(el=>
{
var itemDefinition=itemmager.GetItemDefinition(el.Key);
var go=实例化(预置,根);
var line=go.GetComponent();
行设置项(项定义,el.值);
});
或者您可以重新格式化如下:
craftSystem.requiredItems.ToList().ForEach(el =>
{
var itemDefinition = ItemManager.GetItemDefinition(el.Key);
var go = Instantiate(prefab, root);
var line = go.GetComponent<UICraftItemRequirementLine>();
line.SetItem(itemDefinition, el.Value);
});
craftSystem.requiredItems.ToList().ForEach(el=>
{
var itemDefinition=itemmager.GetItemDefinition(el.Key);
var go=实例化(预置,根);
var line=go.GetComponent();
行设置项(项定义,el.值);
});
您可以改进此问题,如:
dataList.requiredData.ToList().ForEach(x =>
{
var item = ItemManager.GetItemDefinition(x.Key);
var instance = Instantiate(prefab, root);
var line = go.GetComponent<UICraftItemRequirementLine>();
line.SetItem(itemDefinition, x.Value);
});
dataList.requiredData.ToList().ForEach(x=>
{
var item=ItemManager.GetItemDefinition(x.Key);
var实例=实例化(预置,根);
var line=go.GetComponent();
line.SetItem(itemDefinition,x.Value);
});
在C#中,我们有一个扩展方法,如ForEach()
,它与ForEach()一样工作,但使用lambda表达式
祝您好运。您可以改进此问题,如:
dataList.requiredData.ToList().ForEach(x =>
{
var item = ItemManager.GetItemDefinition(x.Key);
var instance = Instantiate(prefab, root);
var line = go.GetComponent<UICraftItemRequirementLine>();
line.SetItem(itemDefinition, x.Value);
});
dataList.requiredData.ToList().ForEach(x=>
{
var item=ItemManager.GetItemDefinition(x.Key);
var实例=实例化(预置,根);
var line=go.GetComponent();
line.SetItem(itemDefinition,x.Value);
});
在C#中,我们有一个扩展方法,如ForEach()
,它与ForEach()一样工作,但使用lambda表达式
祝你好运。使用
列表
为此,你想实现什么?您是指循环中的三行吗?您似乎只使用了一次那些“helper”变量,那么为什么不只使用var itemDefinition=itemmager.GetItemDefinition(el.Key)代码>和行.SetItem(项目定义,el.Value)代码>?——甚至可能var line=实例化(预置,根).GetComponent()代码>---如果你真的想“保存行”。。。但现在是这样。它看起来可读性很好,为什么要更改它呢?--现在它更可读了,因为它有好几行。是的,有,但LINQ不会帮你这么做。LINQ只能从您的输入中选择数据,它不会更改输入。使用List.Foreach
更改输入顺序使用List
您想实现什么?您是指循环中的三行吗?您似乎只使用了一次那些“helper”变量,那么为什么不只使用var itemDefinition=itemmager.GetItemDefinition(el.Key)代码>和行.SetItem(项目定义,el.Value)代码>?——甚至可能var line=实例化(预置,根).GetComponent()代码>---如果你真的想“保存行”。。。但现在是这样。它看起来可读性很好,为什么要更改它呢?--现在它更可读了,因为它有好几行。是的,有,但LINQ不会帮你这么做。LINQ只能从您的输入中选择数据,它不会更改输入。使用List.Foreach
更改输入顺序是的,这很简单,但在el.Key和el.Valuethx下没有意义是的,这很简单,但在el.Key和el.Valuethx下没有意义!可以在craftSystem.requireItems.Select(pair=>(pair.Key,pair.Value))中使用一个varforeach(var(type,count))
thx!可以在craftSystem.requireItems.Select(pair=>(pair.Key,pair.Value))中使用一个varforeach(var(type,count))