如何使用循环来实例化并具体命名一堆对象,而不是多次编写类似的实例化行?

问题描述 投票:0回答:1

我用我的代码实现了我想要的结果(我会先给你看,然后再解释)。但是现在我想使用循环实现相同的功能,而我的问题是到目前为止我的尝试都失败了。

成功代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;

namespace TextLooter
{
    public class Location
    {
        public int positionA;
        public int positionB;

        public Location(int aPositionA, int aPositionB)
        {
            positionA = aPositionA;
            positionB = aPositionB;
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            
            Location city = new Location(1, 1);
            Location park = new Location(2, 2);
            Location town = new Location(3,3);
            Location woods = new Location(4, 4);
            Location meadow = new Location(5, 5);
            Location mountain = new Location(6, 6);
            Location temple = new Location(7, 7);
            Location circus = new Location(8, 8);
            Location gym = new Location(9, 9);
            
            Location location = new Location(0, 0);

            location = park;

            Console.WriteLine(location.positionA + ":" + location.positionB);

            Console.ReadLine();
        }
    }
}

上面我创建了一个带有构造函数的Location类,在Main方法中我实例化了10个Location对象,将location设置为park,并将park的坐标写入控制台。一切都简单直观。我在这里关注的功能是,在编写代码时,我可以通过直观地编写位置名称来将位置设置为我想要的任何位置。

问题是,想象一下世界上是否有 900 个城市,而不是 9 个命名地点可供选择。我不想使用 900 行来实例化 900 个 Location 对象。我想将这些城市名称放在某种集合中,然后使用一些循环来实例化所有这些名称,最重要的是,同时保留能够使用位置名称直观地编写我的代码的功能。

我知道我是新手,我在下面尝试的尝试可能离题很远或者很愚蠢,但它们就在这里。我正在努力学习和发现 C# 中的一些技术,这些技术可能有助于实现这一目标。谢谢你的帮助。

代替 Main 方法中的 9 条实例化行:

尝试 1:

string[] locations = { "city", "park", "town", "woods", "meadow", "mountain", "temple", "circus", "gym" };

int i = 1;
while (i < 10)
{
    Location locations[i] = new Location(i, i);
    i++;
}

Attempt 1 得到错误 CS0136,表明位置不能被声明为本地或参数在这个范围内。

尝试 2:

string[] locations = { "city", "park", "town", "woods", "meadow", "mountain", "temple", "circus", "gym" };

int i = 1;
while (i < 10)
{
    Location (locations[i]) = new Location(i, i);
    i++;
}

尝试 2 收到错误 CS1955,指出 Location can't be used as a function.

对于这些尝试,我希望实现用各自的名称实例化 9 个对象的目标。

您将如何实例化 900 个 Location 对象,同时保持在代码中直观地使用位置名称的能力?

c# loops instantiation
1个回答
0
投票

我建议使用 LINQ 和字典:

string[] keys = { "city", "park", "town", "woods", "meadow", "mountain", "temple", "circus", "gym" };

Dictionary<string, Location> locations =
    keys
        .Select((x, i) => new { Key = x, Location = new Location(i, i) })
        .ToDictionary(x => x.Key, x => x.Location);

Location location = locations["park"];

Console.WriteLine(location.positionA + ":" + location.positionB);
© www.soinside.com 2019 - 2024. All rights reserved.