You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# GUI编程:从文本文件读取数据到对象列表的正确性验证求助

帮你确认文本转对象列表的实现方案

嘿,我来帮你捋捋这个问题~首先看你给出的children.txt格式,每个孩子的信息是姓名,出生日期,趣味事实的结构,不同孩子之间用, (逗号加空格)分隔对吧?先说说你的实现思路可能存在的坑,再给你一个靠谱的实现参考:

先指出潜在的问题

如果直接按逗号Split整个文本,会把下一个孩子的姓名和上一个孩子的事实混在一起(比如likes arts and crafts, Hoos-Foos会被拆成两个字段),这肯定不是你想要的。所以得先按孩子之间的分隔符(, )把整个文本拆成单个孩子的信息块,再拆分每个块里的字段。

完整的实现参考

首先你的Child类可以补全成这样:

public class Child
{
    public string Name { get; set; }
    public string Dob { get; set; }
    public string Fact { get; set; }
}

然后读取并转换的代码可以这么写:

using System;
using System.Collections.Generic;
using System.IO;

class Program
{
    static void Main()
    {
        try
        {
            // 读取整个文本文件的内容
            string fileContent = File.ReadAllText("children.txt");
            
            // 第一步:按", "分割成单个孩子的信息条目
            string[] childEntries = fileContent.Split(new[] { ", " }, StringSplitOptions.RemoveEmptyEntries);
            
            List<Child> childrenList = new List<Child>();
            
            foreach (string entry in childEntries)
            {
                // 第二步:把每个条目拆成3个字段,用Split的重载最多拆3次(防止趣味事实里有逗号)
                string[] fields = entry.Split(',', 3);
                
                if (fields.Length == 3)
                {
                    childrenList.Add(new Child
                    {
                        Name = fields[0].Trim(),
                        Dob = fields[1].Trim(),
                        Fact = fields[2].Trim()
                    });
                }
                else
                {
                    // 处理格式错误的条目,避免程序崩溃
                    Console.WriteLine($"警告:发现格式无效的条目,已跳过:{entry}");
                }
            }
            
            // 这里可以验证结果,比如打印所有孩子的信息
            foreach (var child in childrenList)
            {
                Console.WriteLine($"姓名:{child.Name},生日:{child.Dob},趣味事实:{child.Fact}");
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine($"读取文件时出错:{ex.Message}");
        }
    }
}

几个关键细节说明

  • 用, 作为孩子条目的分隔符:这是根据你给出的文本格式来的,如果实际文件里分隔符不固定(比如有的是逗号加多个空格),可以考虑用正则分割Regex.Split(fileContent, @",\s+")
  • 使用Split(',', 3):这个重载会最多分割成3个部分,就算fact字段里包含逗号也不会被拆分,保证数据正确性
  • 加上错误处理:比如文件不存在、条目格式不对的情况,让程序更健壮

内容的提问来源于stack exchange,提问作者Skimo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:46:05