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

C#中如何使用Generic计算高于和低于平均值的分数

问题分析

你现有代码存在以下核心问题:

  • 声明的泛型参数<A,B,C,D,E>完全未使用,参数类型硬编码为int、double,不符合题目要求的「支持任意类型分数」的要求
  • 没有实现高于/低于平均值的分数统计、输出逻辑
  • Program类嵌套在Calculator类中,结构不合理
  • high、low成员变量未赋值,也无法在外部直接访问

实现思路

要支持任意数值类型的分数,我们可以给泛型参数添加IConvertible接口约束,将不同类型的分数统一转换为double类型参与计算,同时存储原始分数用于后续展示。

修正后完整代码

using System;
using System.Collections.Generic;

namespace oopGeneric
{
    class Calculator
    {
        // 存储高于、低于平均值的分数,以及最终平均值
        public List<object> HigherThanAvg { get; private set; } = new List<object>();
        public List<object> LowerThanAvg { get; private set; } = new List<object>();
        public double Average { get; private set; }

        // 泛型方法,约束参数为可转换类型,支持任意数值类型输入
        public void Calculate<T1, T2, T3, T4, T5>(T1 score1, T2 score2, T3 score3, T4 score4, T5 score5) 
            where T1 : IConvertible
            where T2 : IConvertible
            where T3 : IConvertible
            where T4 : IConvertible
            where T5 : IConvertible
        {
            // 统一转double计算总和
            double s1 = score1.ToDouble(null);
            double s2 = score2.ToDouble(null);
            double s3 = score3.ToDouble(null);
            double s4 = score4.ToDouble(null);
            double s5 = score5.ToDouble(null);

            double sum = s1 + s2 + s3 + s4 + s5;
            Average = sum / 5;
            Console.WriteLine($"总和:{sum},平均值:{Average:F2}");

            // 逐个判断高低,存储原始分数
            CheckScore(score1, s1);
            CheckScore(score2, s2);
            CheckScore(score3, s3);
            CheckScore(score4, s4);
            CheckScore(score5, s5);

            // 打印结果
            Console.WriteLine("高于平均值的分数:" + string.Join("、", HigherThanAvg));
            Console.WriteLine("低于平均值的分数:" + string.Join("、", LowerThanAvg));
        }

        private void CheckScore<T>(T originalScore, double num) where T : IConvertible
        {
            if (num > Average)
            {
                HigherThanAvg.Add(originalScore);
            }
            else if (num < Average)
            {
                LowerThanAvg.Add(originalScore);
            }
            // 等于平均值的不计入高低统计,可根据需求调整
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            Calculator calc = new Calculator();
            // 可传入任意数值类型组合,不需要手动指定泛型类型,编译器会自动推断
            calc.Calculate(5, 5.5, 15.0, 6, 8);
        }
    }
}

运行结果示例

总和:39.5,平均值:7.90
高于平均值的分数:15、8
低于平均值的分数:5、5.5、6

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 14:48:03