C#中如何在Toets类内部声明并赋值该类的数组?
将题目数组移至Toets类内部的实现方案
实现思路
把题目数组定义为Toets类的静态成员,因为题目集合属于类本身,不需要依赖实例;通过静态构造函数完成数组初始化,确保程序启动时自动加载数据;主类直接通过类名访问该数组即可。
修改后的Toets类代码
using System; namespace Speletjie { internal class Toets { public string Vraag { get; set; } public string Keuse1 { get; set; } public string Keuse2 { get; set; } public string Keuse3 { get; set; } public string Keuse4 { get; set; } public string Antwoord { get; set; } // 静态数组,存储所有题目 public static Toets[] Vrae { get; private set; } // 静态构造函数,初始化题目数据 static Toets() { Vrae = new Toets[20]; Vrae[0] = new Toets("世界上有多少个大洲?", "9", "7", "5", "4") { Antwoord = Vrae[0].Keuse2 }; Vrae[1] = new Toets("哪个大洲同时也是一个国家?", "澳大利亚", "欧洲", "亚洲", "非洲") { Antwoord = Vrae[1].Keuse1 }; Vrae[2] = new Toets("日本的首都是哪里?", "格拉斯哥", "北京", "新德里", "东京") { Antwoord = Vrae[2].Keuse4 }; Vrae[3] = new Toets("南非的哪个城市是玫瑰之城?", "比勒陀利亚", "开普敦", "布隆方丹", "伊丽莎白港") { Antwoord = Vrae[3].Keuse3 }; Vrae[4] = new Toets("南非有多少个省?", "9", "4", "2", "10") { Antwoord = Vrae[4].Keuse1 }; Vrae[5] = new Toets("哪个国家不与南非接壤?", "津巴布韦", "赞比亚", "博茨瓦纳", "纳米比亚") { Antwoord = Vrae[5].Keuse2 }; Vrae[6] = new Toets("南非的哪个邻国完全被南非包围?", "斯威士兰", "莫桑比克", "莱索托", "博茨瓦纳") { Antwoord = Vrae[6].Keuse3 }; Vrae[7] = new Toets("上海在哪个国家?", "印度", "日本", "巴基斯坦", "中国") { Antwoord = Vrae[7].Keuse4 }; Vrae[8] = new Toets("哪条河分隔了旧德兰士瓦和自由邦?", "萨比河", "瓦尔河", "图盖拉河", "穆伊河") { Antwoord = Vrae[8].Keuse2 }; Vrae[9] = new Toets("Wakkerstroom位于哪个省?", "西北省", "自由邦", "林波波省", "普马兰加省") { Antwoord = Vrae[9].Keuse4 }; Vrae[10] = new Toets("哪个城镇不在自由邦?", "Schweizer-Reneke", "Wesselsbron", "Viljoenskroon", "Dewetsdorp") { Antwoord = Vrae[10].Keuse1 }; Vrae[11] = new Toets("哪个城镇不在南非?", "Pofadder", "Uitenhage", "Leonardville", "Oranjeville") { Antwoord = Vrae[11].Keuse3 }; Vrae[12] = new Toets("哪条山脉位于比勒陀利亚北部和Moot地区之间?", "马加利斯堡山脉", "德拉肯斯堡山脉", "Bronberge", "桌山") { Antwoord = Vrae[12].Keuse1 }; Vrae[13] = new Toets("南非哪个省面积最大?", "北开普省", "东开普省", "自由邦", "西北省") { Antwoord = Vrae[13].Keuse1 }; Vrae[14] = new Toets("哪个城镇离Majuba最近?", "Vrede", "Volksrust", "Amersfoort", "纽卡斯尔") { Antwoord = Vrae[14].Keuse2 }; Vrae[15] = new Toets("阿根廷在哪个大洲?", "欧洲", "北美洲", "亚洲", "南美洲") { Antwoord = Vrae[15].Keuse4 }; Vrae[16] = new Toets("南非的哪个城市是蓝花楹之城?", "约翰内斯堡", "比勒陀利亚", "布隆方丹", "开普敦") { Antwoord = Vrae[16].Keuse2 }; Vrae[17] = new Toets("豪登省的首府是哪里?", "比勒陀利亚", "杰米斯顿", "约翰内斯堡", "肯普顿公园") { Antwoord = Vrae[17].Keuse3 }; Vrae[18] = new Toets("钻石是在哪里被发现的?", "金伯利", "约翰内斯堡", "布隆方丹", "桑顿") { Antwoord = Vrae[18].Keuse1 }; Vrae[19] = new Toets("哪个城市/城镇不在澳大利亚?", "悉尼", "珀斯", "马德里", "堪培拉") { Antwoord = Vrae[19].Keuse3 }; } public Toets(string v, string k1, string k2, string k3, string k4) { Vraag = v; Keuse1 = k1; Keuse2 = k2; Keuse3 = k3; Keuse4 = k4; Antwoord = ""; } } }
主类中的调用方式
删除原来的数组声明和初始化代码,直接通过类名访问静态数组:
// 直接获取Toets类的静态题目数组 Toets[] vrae = Toets.Vrae; // 示例:访问第一个题目 Console.WriteLine(vrae[0].Vraag); Console.WriteLine($"正确答案:{vrae[0].Antwoord}");
可选优化
- 若题目数量可能变动,建议用
List<Toets>替代数组,提升灵活性; - 可将题目数据迁移至JSON/XML等外部配置文件,避免硬编码,方便后续维护。
内容的提问来源于stack exchange,提问作者Johan Cloete
相关产品推荐
相关产品推荐

