我用我的代码实现了我想要的结果(我会先给你看,然后再解释)。但是现在我想使用循环实现相同的功能,而我的问题是到目前为止我的尝试都失败了。
成功代码:
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 对象,同时保持在代码中直观地使用位置名称的能力?
我建议使用 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);