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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 14:57:04