如何在c#子数组中打印值?

如何在c#子数组中打印值?,c#,C#,我是c#新手,我正在尝试打印一个用户定义的结构。代码: var tracksArr = new[] {new { vessel = GetVesselInfo(aisRecord.VesselId), points = new[] { new { stampUtc = aisRecord.Time.ToString("

我是c#新手,我正在尝试打印一个用户定义的结构。代码:

        var tracksArr = new[]
        {new
            {   vessel = GetVesselInfo(aisRecord.VesselId),
                points = new[]
                {   new
                    {   stampUtc = aisRecord.Time.ToString("yyyy-MM-ddTHH:mm:ssZ"),
        }}}}
   
        foreach (var item in tracksArr)
            {Console.WriteLine("qqq: " + item.ToString());}
其中打印:

qqq: { vessel = { key = 123456,0, mmsi = 7891011, imo = 0 }, points = 
<>f__AnonymousType18`6[System.String,System.Double,System.Double...
qqq:{vessel={key=123456,0,mmsi=7891011,imo=0},点数=
f__AnonymousType18`6[System.String,System.Double,System.Double。。。
这个神秘的
f_uuanonymoustype18
是什么?我如何获得点的值?

对于每个具有唯一字段集的点(新的{…}语句意味着创建匿名类型的实例)编译器将生成一个类,其名称类似于
f\uu AnonymousType18
。该类已重写
ToString
方法,但数组/集合-不,并且
point
是一个数组,因此默认情况下
ToString
返回类型名称,即
YourAnonymousTypeName[]
用于数组。您可以使用
string.Join
输出集合:

Console.WriteLine($"qqq: {{vessel = {item.vessel}, points = {string.Join(", ", item.points.Select(p => p.ToString()))}}}");
或者为
创建/使用另一个集合类型,该集合类型将覆盖返回包含所有元素的字符串的
ToString
方法:

public static class ext
{ 
    public static MyList<T> ToMyList<T>(this T[] arr)
    {
        return new MyList<T>(arr);
    }
}
public class MyList<T> : List<T>
{
    public MyList(T[] arr)
    {
        AddRange(arr);
    }
    
    public override string ToString()
    {
        return string.Join(",", this);
    }
}

var tracksArr = new[]
       {new
            {   vessel = 1,
                points = new[]
                {   new
                    {   stampUtc = DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ssZ"),               }
                }
                .ToMyList()
            }               
        }; // prints "qqq: { vessel = 1, points = { stampUtc = 2020-06-24T14:58:08Z } }"
公共静态类ext
{ 
公共静态MyList-ToMyList(此T[]arr)
{
返回新的MyList(arr);
}
}
公共类MyList:列表
{
公共MyList(T[]arr)
{
AddRange(arr);
}
公共重写字符串ToString()
{
返回字符串。Join(“,”,this);
}
}
var tracksArr=new[]
{新
{船只=1,
点数=新[]
{新
{stampUtc=DateTime.Now.ToString(“yyyy-MM-ddTHH:MM:ssZ”),}
}
.ToMyList()
}               
};//打印“qqq:{vessel=1,points={stampUtc=2020-06-24T14:58:08Z}”

作为旁白,我强烈建议您在发布堆栈溢出之前,让Visual Studio以默认样式格式化代码。虽然您可以对大括号的位置等有个人偏好,但如果它与广泛使用的默认样式有很大不同,则会使其他人更难阅读。谢谢John、 我想尽量减少这里的空间。