gpt4 book ai didi

c# - var转换为C#中的类类型?

转载 作者:太空宇宙 更新时间:2023-11-03 17:30:11 25 4
gpt4 key购买 nike

我是C#的新手,正在经历ArrayList。我的问题是我们可以将不同的数据类型-不同的类,不同的结构存储到ArrayList中并访问它们。我可以看到可以添加它们,但是我不确定如何获取它。我尝试使用数据类型名称(即类名称)进行检索,但是我看到在打印输出时缺少第一个成员数据。
我在这里想念什么概念?

class OSPF_Area
{
public string AreaId { get; set; }
public string AreaName { get; set; }
public int AreaNumberofRoutes { get; set; }
}

class OSPFLinkPacket
{
public int LinkPacketCounts { get; set; }
public int NumberOfHelloPacket { get; set; }
public string LSAType { get; set; }
}

static void Main(string[] args)
{
OSPF_Area ospfArea1 = new OSPF_Area();
ospfArea1.AreaId = "0.0.0.1";
ospfArea1.AreaId = "non-backbone";
ospfArea1.AreaNumberofRoutes = 14;

OSPFLinkPacket ospfLink1 = new OSPFLinkPacket();
ospfLink1.LinkPacketCounts = 20;
ospfLink1.LSAType = "Type4";
ospfLink1.NumberOfHelloPacket = 40;

ArrayList OSPFInfo = new ArrayList();

OSPFInfo.Add(ospfLink1);
OSPFInfo.Add(ospfArea1);

foreach(var val in OSPFInfo)
{
if(val.GetType().Name == "OSPF_Area")
{
Convert.ChangeType(val, typeof(OSPF_Area));
OSPF_Area area = (OSPF_Area)val;
Console.WriteLine(area.AreaId);
Console.WriteLine(area.AreaName);
Console.WriteLine(area.AreaNumberofRoutes);
}
}
Console.ReadLine();
}


输出为:


  非烟草
  14


我不确定为什么没有打印区域ID。

最佳答案

首先,我建议您不要使用ArrayList。尽管可以在列表中存储不同类型的对象,但是请尽可能使用List<T>,这有点反模式。

Convert.ChangeType不会为您做任何事情,您应该使用isas。例如:

OSPF_Area area = val as OSPF_Area;
if (area != null)
{
Console.WriteLine(area.AreaId);
Console.WriteLine(area.AreaName);
Console.WriteLine(area.AreaNumberofRoutes);
}


输出问题几乎可以肯定是由于 Main的第一行中的错字:

ospfArea1.AreaId = "0.0.0.1";
ospfArea1.AreaId = "non-backbone";


...您没有为 AreaName分配任何内容。

关于c# - var转换为C#中的类类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42106982/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com