【发布时间】:2019-08-17 18:38:48
【问题描述】:
基于以下代码,我如何访问另一个类 List 中的类。
我可以很好地访问“datatosend”项目,但是一旦我到达在 dataGroup 内部实例化的 datagroupProject,我就不知道如何从 datagroupProject 和 datagroupCabs 获取值。
如何获取和存储这些值以便我可以使用它们?
foreach (dataGroup r in datatosend)
{
string tmpusrn = r.User;
string tmpNumProj= r.???
...
do something...
}
这是我存储数据的地方:
datatosend.Add(new dataGroup()
{
User = cUnum,
UserName = cUname,
Project = new List<datagroupProject>()
{
new datagroupProject
{
NumProj = cProNum,
headers = new List<datagroupCabs>()
{
new datagroupCabs
{
invoice = tmpinvoice,
datainv = tmpdate,
provider = tmpProov
}
}
}
}
});
这就是我创建类的方式:
public class dataGroup
{
public string User { get; set; }
public string UserName { get; set; }
public List<datagroupProjects> Project { get; set; }
}
public class datagroupProject
{
public string NumProj { get; set; }
public List<datagroupCabs> headers { get; set; }
}
public class datagroupCabs
{
public string invoice { get; set; }
public string datainv { get; set; }
public string provider { get; set; }
public List<datagrouplines> refs { get; set; }
}
如果需要,这里是全部内容:
namespace testinv
{
class Program
{
static void Main(string[] args)
{
_GLOBALS.InitAll();
GetUsersData();
}
public class dataGroup
{
public string User { get; set; }
public string UserName { get; set; }
public List<datagroupProjects> Project { get; set; }
}
public class datagroupProject
{
public string NumProj { get; set; }
public List<datagroupCabs> headers { get; set; }
}
public class datagroupCabs
{
public string invoice { get; set; }
public string datainv { get; set; }
public string provider { get; set; }
public List<datagrouplines> refs { get; set; }
}
public static void GetUsersData()
{
Console.WriteLine("Init");
string cUnum = "";
string cUname = "";
string cProNum = "";
List<dataGroup> datatosend = new List<dataGroup>();
List<datagroupProject> datatosendproj = new List<datagroupProject>();
List<datagroupCabs> datatsendCabs = new List<datagroupCabs>();
DataTable dtUsers = new DataTable();
dtUsers = BSTOOLS.GetUserData("");
foreach (DataRow u in dtUsers.Rows)
{
cUnum = u.ItemArray[0].ToString();
cUname = u.ItemArray[1].ToString();
DataTable dtProjects = new DataTable();
dtProjects = BSTOOLS.GetProjects(cUnum);
foreach (DataRow p in dtProjects.Rows)
{
cProNum = p.ItemArray[0].ToString();
DataTable dtlines = new DataTable();
dtlines = BSTOOLS.DistinctGetDeliveryNotesLines(cProNum);
foreach (DataRow l in dtlines.Rows)
{
string tmpinvoice = "";
string tmpdate = "";
string tmpProov = "";
string tmpiClave = l.ItemArray[0].ToString();
DataTable resultCab = new DataTable();
resultCab = BSTOOLS.checkifFlow(tmpiClave);
if(resultCab.Rows.Count > 0)
{
foreach (DataRow c in resultCab.Rows)
{
tmpinvoice = c.ItemArray[0].ToString();
tmpdate = c.ItemArray[1].ToString();
tmpProov = c.ItemArray[2].ToString();
}
datatosend.Add(new dataGroup()
{
User = cUnum,
UserName = cUname,
Project = new List<datagroupProject>()
{
new datagroupProject
{
NumProj = cProNum,
headers = new List<datagroupCabs>()
{
new datagroupCabs
{
invoice = tmpinvoice,
datainv = tmpdate,
provider = tmpProov
}
}
}
}
});
}
}
}
}
}
}
}
感谢您的宝贵时间。
[为澄清而编辑]
@博斯科 @朱梦
基本上我需要的是数据组中的每个用户,遍历他在 datagroupProject 中的项目,获取项目和 datagroupCabs 中的所有项目(这是 datagroupproject 中的另一个 List 类)。所以它最终会是这样的:
user1
project1
inv1
inv2
project2
inv1
user2
...
我可以访问 datagroupProject 并获取值,但我如何访问其中的列表 datagroupCabs 并循环访问它? 希望这能澄清我的需要。 再次感谢您的时间。
【问题讨论】:
-
这取决于您想在
datagroupProject中访问的方式和内容,您仍然可以循环访问它,因为它是一个列表或使用 linq。 -
您有一个项目集合,显然您只想在这一行中提取 1 个数字:
string tmpNumProj= r.???。至少在我看来是这样的。您需要清楚您要提取哪些项目并采取NumProj。你能告诉我们这个吗?首先?最后?它们都一样吗? -
“我怎样才能访问另一个类列表中的一个类列表。”由于它是一个普通属性,您可以像访问任何其他属性一样访问它:
r.Project。然后你需要知道你想要索引哪个元素。在特定位置选择元素由[index]完成,如r.Project[0]