【问题标题】:Is it always necessary to create a class for calculate table in C#?是否总是需要在 C# 中为计算表创建一个类?
【发布时间】:2021-05-23 08:47:46
【问题描述】:

我有一个计算表:

RowsName Parameter1 Parameter2
Name1 20 5
Name2 4 6
Sum 100 100

是否需要为表创建一个类?在我看来,在这种情况下它只是使程序复杂化,并且没有必要。

但我已经尝试创建一个类:

public class Table
{
        public string RowsName { get; set; }
        public double Parameter1 { get; set; }
        public double Parameter2 { get; set; }
        public static int RowNumber=15;
}

然后我尝试使用它:

static void Main(string[] args)
{
        Table[] row = new Table[Table.RowNumber];

        for (int i = 0; i < Table.RowNumber; i++)
        {
            row[i] = new Table();                
            row[i].Parameter1  = IOData.valueParameter1 [i];
            row[i].Parameter2  = IOData.valueParameter2[i];
        }

        row[Table.RowNumber-1].Parameter1  = IOData.valueParameter1 .Sum();
        row[Table.RowNumber-1].Parameter1  = IOData.valueParameter2 .Sum();
  }

而且我有一个参数输出的方法:

   public static void DataOutput(string[] rowsName, params double[][] column)
   {           
        for (int i = 0; i <column[0].Length; i++)
        {                
            Console.Write("{0,12:0.00}|",rowsName[i]);

            for (int j = 0; j < column.Length; j++)
                Console.Write("{0,12:0.00}|", column[j][i]);

            Console.WriteLine("");
        }
    }

但是我不能用我的对象的属性数组调用这个方法。我该怎么做?

DataOutput(row[].Parameter1, row[].Parameter2);//this is does not work

我需要创建两个额外的数组:

double[] outputParameter1 = new double[Table.RowNumber];
double[] outputParameter2= new double[Table.RowNumber];

for (int i = 0; i < Table.RowNumber; i++)
{
    outputParameter1[i] = row[i].Parameter1;
    outputParameter2[i] = row[i].Parameter2;
}            

IOData.DataOutput( outputParameter1 , outputParameter2);

我认为如果我不创建一个类,只创建两个数组并使用它们,它会简单得多。但是我想编写代码,就好像它是由经验丰富的开发人员编写的一样。所以我的问题是:

【问题讨论】:

  • “所以我的问题是:...” - 你让我们陷入悬念;)
  • 类不是必需的,它只是简化了事情。它创建 OOP 功能。

标签: c# class oop


【解决方案1】:

您可以尝试使用 LINQ,如下所示:

var column1 = row.Select(r => r.Parameter1).ToArray();
var column2 = row.Select(r => r.Parameter2).ToArray();

DataOutput(column1, column2);

【讨论】:

    【解决方案2】:

    尝试以下:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Data;
    
    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                DataTable dt = new DataTable();
                dt.Columns.Add("RowsName", typeof(string));
                dt.Columns.Add("Parameter1", typeof(int));
                dt.Columns.Add("Parameter2", typeof(int));
    
                dt.Rows.Add(new object[] { "Name1", 20, 5 });
                dt.Rows.Add(new object[] { "Name2", 4, 6 });
    
                var sums = Enumerable.Range(0, dt.Columns.Count).Select(x => (x == 0) ? (object)"Sum" : (object)dt.AsEnumerable().Sum(y => y.Field<int>(x))).ToArray();
                
                DataRow row = dt.Rows.Add();
                row.ItemArray = sums;
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-02
      • 2012-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多