Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#将KeyValue设置为一行中的变量_C#_Linq_Syntactic Sugar - Fatal编程技术网

C#将KeyValue设置为一行中的变量

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

是否有前3行代码的简短版本:

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))中使用一个var
foreach(var(type,count))
thx!可以在craftSystem.requireItems.Select(pair=>(pair.Key,pair.Value))中使用一个var
foreach(var(type,count))