C#创建一个字符串中有名称的对象的许多实例
本文关键字:有名称 对象 实例 许多 字符串 一个 创建 | 更新日期: 2023-09-27 17:57:45
我正在尝试从.txt文件加载一些信息,然后创建一个类的实例。。。我需要为.txt文件中的每一行创建新的实例,我想按顺序命名每个实例。.txt文件中的第一行将创建一个名为card1的实例,另一行将创建名为card2的instace….txt文件中确实有很多行,所以我需要自动化这个过程,但我所做的不起作用,因为我似乎无法使用字符串作为实例的名称。。。有什么能解决这个问题吗?谢谢你的帮助。。。
Console.WriteLine("Loading cards from .txt file");
using (StreamReader sr = new StreamReader(@"G:'Temp'cards.txt"))
{
string s;
int cardIndex = 1;
while ((s = sr.ReadLine()) != null)
{
string cardName = "card" + cardIndex.ToString();
Card cardName = new Card(s)
cardIndex++;
}
}
您的问题是对Card
和string
变量使用相同的名称。
Console.WriteLine("Loading cards from .txt file");
using (StreamReader sr = new StreamReader(@"G:'Temp'cards.txt"))
{
string s;
int cardIndex = 1;
Dictionary<string, Card> d = new Dictionary<string, Card>();
while ((s = sr.ReadLine()) != null)
{
string cardName = "card" + cardIndex.ToString();
Card card = new Card(cardName, s);
d.Add(s, card);
cardIndex++;
}
}
然后,您可以根据您拥有的构造函数/类的实现,将cardName
、s
和您想要的任何内容传递给card
。
要访问它,请使用您喜欢的任何访问字典中某个值的方式:通过[]
或TryGet
,就像其他指定的方式一样。
虽然这将解决您的问题,但我建议对代码进行一些重构。如果你处于那个水平并了解发生了什么,我会按照@Dmitry建议的方式(用linq)。
这是一种拥有index
并为每个line
创建这些对象的漂亮而优雅的方式
尝试Linq:
Card[] deck = File
.ReadLines(@"G:'Temp'cards.txt")
.Where(line => !string.IsNullOrEmpty(line))
.Select((line, index) => new Card(string.Format("card{0}", index + 1), line))
.ToArray(); // technically, materialization is not necessary
您的类Card需要一个具有名称的属性。您可以使用"name"来覆盖ToString()。看看这个例子:
public class Card
{
public readonly string Name;
public readonly string S;
public Card(string Name, string S)
{
this.Name = Name;
this.S = S;
}
public override ToString()
{
return Name;
}
}
现在你可以用在你的循环中创建一张卡
Card NewCard = new Card(cardName, s);