Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/341.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#cSharp中构造期间,我可以动态填充object中的数组属性吗_C#_Arrays - Fatal编程技术网

在c#cSharp中构造期间,我可以动态填充object中的数组属性吗

在c#cSharp中构造期间,我可以动态填充object中的数组属性吗,c#,arrays,C#,Arrays,在C#中,在初始化对象期间,开发人员可以在不使用特定构造函数签名的情况下指定属性值,我想知道是否可以使用foreach循环(或其他一些动态循环方法)使用动态数量的条目填充数组属性 例如 public class MyObject { public string[] ArrayOfItems { get; set; } public MyObject() { } } public class Item { public string ItemName {

在C#中,在初始化对象期间,开发人员可以在不使用特定构造函数签名的情况下指定属性值,我想知道是否可以使用foreach循环(或其他一些动态循环方法)使用动态数量的条目填充数组属性

例如

public class MyObject
{
    public string[] ArrayOfItems { get; set; }
    public MyObject()
    {

    }
}

public class Item
{
    public string ItemName { get; set; }
    public Item()
    {

    }
}

public void CreateNewMyObject()
{
    //List would normally come from elsewhere...
    List<Item> ItemList = new List<Item>()
    {
        new Item() { ItemName = "Item One" },
        new Item() { ItemName = "Item Two" },
        new Item() { ItemName = "Item Three" }
    };

    MyObject myObject = new MyObject()
    {
        ArrayOfItems = new string[]
        {
            //  This is where I'm stuck.
            //  I want to dynamically build my array but cant use foreach?
            foreach (Item item in ItemList)
            {
                item.ItemName
            }
        };
    }
}
公共类MyObject
{
公共字符串[]ArrayOfItems{get;set;}
公共对象()
{
}
}
公共类项目
{
公共字符串ItemName{get;set;}
公共项目()
{
}
}
public void CreateNewMyObject()
{
//名单通常来自其他地方。。。
List ItemList=新列表()
{
新项(){ItemName=“Item One”},
新项(){ItemName=“Item Two”},
新项(){ItemName=“Item Three”}
};
MyObject MyObject=新的MyObject()
{
ArrayOfItems=新字符串[]
{
//这就是我被困的地方。
//我想动态构建阵列,但无法使用foreach?
foreach(项目列表中的项目)
{
item.ItemName
}
};
}
}
像这样使用LINQ:

MyObject myObject = new MyObject()
{
    ArrayOfItems = ItemList.Select(i => i.ItemName).ToArray()
}
如果
arrayFitems
属于复杂类型,例如
MyArrayItem
,并且
Item
有一个额外的
ItemCost
属性,您应该执行以下操作:

MyObject myObject = new MyObject()
{
    ArrayOfItems = ItemList.Select(i => new MyArrayItem() { Name = i.ItemName, Cost = i.ItemCost }).ToArray()
}
并且应该
MyArrayItem
具有匹配的构造函数:

MyObject myObject = new MyObject()
{
    ArrayOfItems = ItemList.Select(i => new MyArrayItem(i.ItemName, i.ItemCost)).ToArray()
}

不清楚你在问什么。您想基于
ItemList
构建
ArrayOfItems
?@amiroveis他想要每个
项目。ItemName
来自
ItemList
内部的
ArrayOfItems
,但是,当您已经拥有一个包含所有项目的列表时,为什么还要创建一个新列表呢?我们正在使用一组由cXML标准和我们需要从发送给我们的cXML到Microsoft Dynamics NAV中的一组web服务中创建自己的对象。这些类不是由我们构建或设计的,但我们需要使用它们。我们正在编写中间的转换代码。假设我们在Item中有第二个属性,比如“ItemCost”?如果ArrayFitems是一个复杂类型,我怎么能把它传进来?@Karl在
Select()
中创建了这个复杂类型。太棒了!!正是我需要的答案。谢谢你对昂德雷的帮助!!