在c#cSharp中构造期间,我可以动态填充object中的数组属性吗
在C#中,在初始化对象期间,开发人员可以在不使用特定构造函数签名的情况下指定属性值,我想知道是否可以使用foreach循环(或其他一些动态循环方法)使用动态数量的条目填充数组属性 例如在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 {
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()
中创建了这个复杂类型。太棒了!!正是我需要的答案。谢谢你对昂德雷的帮助!!