提问人:Burhanaddin Mirsadizada 提问时间:11/6/2023 更新时间:11/10/2023 访问量:93
在将列表写入文本 C# 时遇到问题 [已关闭]
Having issues writing List to Text C# [closed]
问:
public class FileService
{
IProductRepository _repository = new ProductRepository();
string path = "....";
public async Task<string> GetInfoAsync()
{
List<Product> products = await _repository.GetAllAsync();
string? value = default;
foreach (Product item in products)
value += item.ToString();
if (!string.IsNullOrWhiteSpace(value))
return value;
else
return "List is empty!";
}
public async Task WriteAsync()
{
File.WriteAllText(path, await GetInfoAsync());
}
}
此代码有问题。它总是返回 null 并写入“List is empty!”。确实覆盖了 Product 类中的 ToString() 方法。我是初学者,所以不要评判:/
我期望它获取列表并将其写入指定的文本文件。
答:
0赞
AztecCodes
11/6/2023
#1
C# 列表到文本问题
变化:
- 在开始循环之前检查是否为空。
products
null
- 使用类进行有效的字符串连接。
StringBuilder
- 为每个产品添加,以确保每个产品的信息从新行开始。
AppendLine
product
重构的代码:
public class FileService {
IProductRepository _repository = new ProductRepository();
// Ensure that this is a valid path.
string path = "....";
public async Task < string > GetInfoAsync() {
List < Product > products = await _repository.GetAllAsync();
if (products == null || products.Count == 0)
return "List is empty!";
StringBuilder value = new StringBuilder();
foreach(Product item in products)
value.AppendLine(item.ToString());
return value.ToString();
}
public async Task WriteAsync() {
File.WriteAllText(path, await GetInfoAsync());
}
}
评论
0赞
Rand Random
11/6/2023
AppendLine
更改 OP 想要的(可能)所需输出
0赞
AztecCodes
11/6/2023
@RandRandom 让我们看看。
0赞
Fildor
11/6/2023
不过,我建议坚持使用常见的 C# 代码约定和样式。
0赞
Burhanaddin Mirsadizada
11/6/2023
这没有解决它,我将尝试找到问题。
0赞
Burhanaddin Mirsadizada
11/7/2023
#2
class Product
{
public string Name { get; set; }
public string Description { get; set; }
public override string ToString()
{
return $"Name:{Name} Description:{Description}";
}
}
class Program
{
public static void Main()
{
Product product1 = new Product();
Product product2 = new Product();
List<Product> products = new List<Product>();
Console.WriteLine("Enter name:");
string name = Console.ReadLine();
Console.WriteLine("Enter desc:");
string description = Console.ReadLine();
product1.Name = name;
product1.Description = description;
products.Add(product1);
product2.Name = "Test";
product2.Description = "Test";
products.Add(product2);
string Get()
{
string result = default;
foreach (Product p in products)
{
result += $"{p}\n";
}
return result;
}
//"...." stands for path.
File.WriteAllText("....",Get());
}
}
我写了这个,它复制了有问题的类的预期功能。在这种情况下,它按预期工作。
我放弃了这个项目,我将尝试从头开始,更仔细地构建它。
评论
GetAllAsync()
so don't judge
- 你不能告诉我该怎么做,我以评判初学者为生 - 评委们会密集地调试你的代码......设置断点并查看发生的情况