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

C#中如何通过索引拼接属性名循环访问类的属性?

解决C#动态访问类字段的"identifier expected"错误

你的代码报错是因为C#作为静态类型语言,不支持s.$"sub{i}"这种动态拼接标识符的语法——编译器无法识别这种运行时才确定的字段名,所以抛出"identifier expected"错误。下面提供几种可行的解决方案:

方案1:改用数组/集合(推荐)

从设计层面优化,把重复的sub1/sub2/sub3字段替换成数组或集合,这是最符合C#编码规范的做法,类型安全且性能最优:

public class SampleApplication
{
    public static void Main(string[] args)
    {
        Student s = new Student();
        for(int i = 0; i < s.Subjects.Length; i++)
        {
            s.Subjects[i] = "Subjects";
        }
    }
}

public class Student
{
    // 用数组存储3个科目,对应原有的sub1-sub3
    public string[] Subjects = new string[3];  
}

如果需要更灵活的长度,可以用List<string>:

public class Student
{
    public List<string> Subjects = new List<string>();  
}

// 使用时先初始化元素再赋值
public static void Main(string[] args)
{
    Student s = new Student();
    // 先添加3个空元素
    for(int i = 0; i < 3; i++)
    {
        s.Subjects.Add(string.Empty);
    }
    // 再循环赋值
    for(int i = 0; i < s.Subjects.Count; i++)
    {
        s.Subjects[i] = "Subjects";
    }
}

方案2:使用反射(动态访问字段)

如果必须保留原有的sub1/sub2/sub3字段结构,可以用反射实现动态访问:

using System.Reflection;

public class SampleApplication
{
    public static void Main(string[] args)
    {
        Student s = new Student();
        for(int i = 1; i <= 3; i++)
        {
            // 获取指定名称的字段信息
            FieldInfo field = typeof(Student).GetField($"sub{i}");
            // 给字段赋值
            field.SetValue(s, "Subjects");
        }
    }
}

public class Student
{
    public string sub1;
    public string sub2;
    public string sub3;  
}

注意:反射的性能比直接访问字段差,适合字段数量少、动态需求强的场景。

方案3:使用switch映射索引与字段

如果字段数量很少且不想用反射,也可以用switch语句做索引到字段的映射:

public class SampleApplication
{
    public static void Main(string[] args)
    {
        Student s = new Student();
        for(int i = 1; i <= 3; i++)
        {
            switch(i)
            {
                case 1: s.sub1 = "Subjects"; break;
                case 2: s.sub2 = "Subjects"; break;
                case 3: s.sub3 = "Subjects"; break;
            }
        }
    }
}

public class Student
{
    public string sub1;
    public string sub2;
    public string sub3;  
}

这种方案扩展性差,后续新增字段需要修改switch逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 23:15:36