【问题标题】:Inserting data from a list of object to an array on C#将数据从对象列表插入到C#上的数组中
【发布时间】:2015-03-30 04:25:38
【问题描述】:

我有一个对象的列表。该对象表示一个点,其中一条线 og 停放的汽车位于某个位置以及汽车指向的方向。该对象包含多种类型的数据,这些数据也充当属性。列表中有 4 个。这是它们的类型和变量名。

public enum Direction
{
    North,
    West,
    South,
    East
};

public class Location
{
    public Int16 X {set; get;}
    public Int16 Y {set; get;}
    public Direction Z {set; get;}
}

我要做的是测试我的程序是否运行良好。我打算通过将所有“X”放在一个数组中并将它们显示在控制台窗口上来测试它。我正在使用 WPF 和后台线程处理来完成所有工作。关于我如何做的任何想法或建议?我一直在尝试几种方法,例如 Linq 中的 To.Array(),但结果总是我用来包含数据的新数组为空。

【问题讨论】:

  • 这个问题对我来说不是 100% 清楚的。你想创建一个对象并将它们存储到一个数组中然后尝试迭代它们吗?
  • @Aizen 我正在尝试从对象中的一个属性创建一个数组。我想将所有“X”收集到一个数组中,并将其显示在控制台窗口中以进行测试。到目前为止,我仍在尝试下面给出的所有答案。

标签: c# arrays wpf list


【解决方案1】:

我不确定你是否想要 List 或 ArrayList 等。所以我提供了最简单的 Linq。确保使用 System.Collections.Generic 添加;

class Program
{
    public enum Direction { North, East, South, West };
    static List<Location> myObjects = new List<Location>();


    public class Location
    {
        public Int16 X { get; set; }
        public Int16 Y { get; set; }
        public Direction  Z { get; set; }

        public Location(Int16 x, Int16 y, Direction z)
        {
            X = x;
            Y = y;
            Z = z;

        }

    }
    static void Main(string[] args)
    {
        myObjects.Add(new Location(10, 10, Direction.North));
        myObjects.Add(new Location(30, 20, Direction.East));
        myObjects.Add(new Location(50, 5, Direction.West));
        myObjects.Add(new Location(60, 32, Direction.South));

        foreach (Location it in myObjects)
        {
            Console.WriteLine("Parked Location is {0}, X is {1}, Y is {2}", it.Z, it.X, it.Y);
        }

    }
}

【讨论】:

    【解决方案2】:

    如果你想收集所有可以使用的 X 点:

     List<Location> allLocations = ...;
    
     var allX = from loc in allLocations select loc.X;
     foreach(int i in allX) 
     {
        Console.WriteLine(i);
     }
     var asAnArray = allX.ToArray();
    

    完整代码

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace ConsoleApplication4
    {
        class Program
        {
            public enum Direction
            {
                North,
                West,
                South,
                East
            };
    
            public class Location
            {
                public Int16 X { set; get; }
                public Int16 Y { set; get; }
                public Direction Z { set; get; }
            }
    
            static void Main()
            {
                List<Location> allLocations = new List<Location> {
                    new Location() {X=1, Y=2, Z = Direction.North },
                    new Location() {X=2, Y=3, Z = Direction.West },
                    new Location() {X=3, Y=4, Z = Direction.East }
                };
                var allX = from loc in allLocations select loc.X;
                foreach (int i in allX)
                {
                    Console.WriteLine(i);
                }
                var asAnArray = allX.ToArray();
                Console.WriteLine("Array is:" + (asAnArray == null ? "Null" : asAnArray.Length.ToString()));
                Console.ReadLine();
    
                // Or using a different syntax for the same effect.
                asAnArray = allLocations
                    .Select(loc => loc.X)
                    .ToArray();
                Console.WriteLine("Array is:" + (asAnArray == null ? "Null" : asAnArray.Length.ToString()));
                Console.ReadLine();
            }
        }
    }
    

    【讨论】:

    • 来自 Icollection 的子句是否可用?还没有测试过。似乎是使用 linq 的最快方法。
    • @Aizen,如果我正确理解你的问题,是的。通过Using System.Linq 语句,您可以获得应用于IEnumerable 和IQuerable 的扩展方法,ICollection 实现了IEnumerable。 from 关键字是用于在 IEnumerable 上调用 Select 扩展方法的 c# 语法糖。是的。
    • var mySpecialPick = from test in myButtons where test.ButtonNumber == 4 select test; MyButtons myPick = myButtons.Find(w => w.ButtonNumber == 4);我尝试了 2 种不同的方法。在 Generic List 中测试的常用 Linq 无疑是可行的。尝试使用 from 子句返回 System.Linq.Enumerable+WhereListIteretor 等作为字符串。不过,它确实可以在数组中完美运行。我现在要尝试使用 ArrayList 我猜它会起作用,因为 ArrayList 列出了隐式数据类型。谢谢大卫。
    • @DavidWaters 我正在尝试使用您的答案。我仍然不明白的一件事是 asAnArray 在整个过程之后为空。
    • @undip_student 您的列表是空的吗?我已经更新了完整的代码,它运行并在最后生成一个数组。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-16
    相关资源
    最近更新 更多