C# 在C中传递未知的数据类型参数#

C# 在C中传递未知的数据类型参数#,c#,class,reflection,parameter-passing,generic-programming,C#,Class,Reflection,Parameter Passing,Generic Programming,我的主程序是通过另一个类读取电子表格,该类对电子表格的模式(即其中的数据类型)一无所知。我的方法是定义一个spreadsheetRecord来定义这些数据类型,并将该记录作为类或结构传递到被调用的类中,以便读取该电子表格 问题是C#编译器抱怨它不能隐式地将main的SpreadsheetRecord数据类型转换为被调用类已知的数据类型。当然不能,因为目标类对该数据类型一无所知。那么,电子表格的模式应该如何传递给负责读取和保存电子表格数据的类例程呢 void class Main { pu

我的主程序是通过另一个类读取电子表格,该类对电子表格的模式(即其中的数据类型)一无所知。我的方法是定义一个spreadsheetRecord来定义这些数据类型,并将该记录作为类或结构传递到被调用的类中,以便读取该电子表格

问题是C#编译器抱怨它不能隐式地将main的SpreadsheetRecord数据类型转换为被调用类已知的数据类型。当然不能,因为目标类对该数据类型一无所知。那么,电子表格的模式应该如何传递给负责读取和保存电子表格数据的类例程呢

void class Main
{
    public class SpreadsheetRecord
    {
        public double volAvg;
        public double volOvr10;
        public double sumScore;
    }

    static string[] sheetHeads = { "Volume (10 Day Avg)", "Volume (Today/Avg 10 Day)",
            "Equity Summary Score from StarMine from Refinitiv" };

    SpreadsheetData sheetDat = new SpreadsheetData(new SpreadsheetRecord(), sheetHeads);
    ...
}


public class SpreadsheetData //SpreadsheetData parses an "unknown" spreadsheet.xls file
{
    public Dictionary<string, Record> SheetDB { get; private set; } //declaration of database
    public class Record { };  //schema for incoming spreadsheet data record

    public SpreadsheetData(Record schemaRecord, string[] recordHeadings) //constructor read in spreadsheet
    {
        ...
        using (IExcelDataReader excelReader = ExcelReaderFactory.CreateBinaryReader(sheetInputFile.OpenRead()))
        {...
            FieldInfo[] recordFieldInfo = typeof(Record).GetFields();
            for (int i = 1; i < result.Tables[0].Rows.Count; i++)
            {
                for (int j = 0; j < recordHeadings.Length; j++)
                    recordFieldInfo[j].SetValue(schemaRecord, sheet1.Rows[i][Column2RecordCrossIndx[j]]);
                SheetDB.Add(sheet1.Rows[i][indxOfSymbol].ToString(), schemaRecord); //store sheet data record
            }
            ...
        }
    }
}
void类主
{
公共类电子表格记录
{
公共双volAvg;
公共双volOvr10;
公开双满分;
}
静态字符串[]页眉={“卷(平均10天)”,“卷(今天/平均10天)”,
“来自Refinitiv的StarMine的股权汇总分数”};
SpreadsheetData sheetDat=新的电子表格数据(新的电子表格记录(),表头);
...
}
公共类SpreadsheetData//SpreadsheetData解析一个“未知”的电子表格.xls文件
{
公共字典SheetDB{get;private set;}//数据库的声明
公共类记录{};//传入电子表格数据记录的架构
公共电子表格数据(记录模式记录,字符串[]记录标题)//构造函数在电子表格中读取
{
...
使用(IExcelDataReader excelReader=ExcelReaderFactory.CreateBaryReader(sheetInputFile.OpenRead()))
{...
FieldInfo[]recordFieldInfo=typeof(Record).GetFields();
对于(int i=1;i
好吧,使用泛型类似乎可以在电子表格读取类中获取未知数据类型(即数据库记录)。非常感谢。欢迎提出任何其他建议

void class Main
{
    public class SpreadsheetRecord
    {
        public double volAvg;
        public double volOvr10;
        public double sumScore;
    }

    static string[] sheetHeads = { "Volume (10 Day Avg)", "Volume (Today/Avg 10 Day)",
            "Equity Summary Score from StarMine from Refinitiv" };

    SpreadsheetData<SpreadsheetRecord> sheetDat = new SpreadsheetData<SpreadsheetRecord>(sheetHeads);
    ...
}


public class SpreadsheetData<T> where T : new() //SpreadsheetData parses an "unknown" spreadsheet.xls file
{
    public Dictionary<string,T> SheetDB { get; private set; } //allow read access to database

    public SpreadsheetData<T>(string[] recordHeadings) //constructor to read in spreadsheet
    {
        ...
        using (IExcelDataReader excelReader = ExcelReaderFactory.CreateBinaryReader(sheetInputFile.OpenRead()))
        {...
            SheetDB = new Dictionary<string,T>(sheet1.Rows.Count); //create database instance
            T schemaRecord = new T(); //create database record instance

            FieldInfo[] recordFieldInfo = typeof(T).GetFields();
            for (int i = 1; i < result.Tables[0].Rows.Count; i++)
            {
                for (int j = 0; j < recordHeadings.Length; j++)
                    recordFieldInfo[j].SetValue(schemaRecord, sheet1.Rows[i][Column2RecordCrossIndx[j]]);
                SheetDB.Add(sheet1.Rows[i][indxOfSymbol].ToString(), schemaRecord); //store sheet data record
            }
            ...
        }
    }
}
void类主
{
公共类电子表格记录
{
公共双volAvg;
公共双volOvr10;
公开双满分;
}
静态字符串[]页眉={“卷(平均10天)”,“卷(今天/平均10天)”,
“来自Refinitiv的StarMine的股权汇总分数”};
电子表格数据表DAT=新的电子表格数据(表头);
...
}
公共类SpreadsheetData,其中T:new()//SpreadsheetData解析“未知”的电子表格.xls文件
{
公共字典SheetDB{get;private set;}//允许对数据库进行读取访问
公共电子表格数据(字符串[]记录标题)//要在电子表格中读取的构造函数
{
...
使用(IExcelDataReader excelReader=ExcelReaderFactory.CreateBaryReader(sheetInputFile.OpenRead()))
{...
SheetDB=newdictionary(sheet1.Rows.Count);//创建数据库实例
T schemaRecord=new T();//创建数据库记录实例
FieldInfo[]recordFieldInfo=typeof(T).GetFields();
对于(int i=1;i
好吧,使用泛型类似乎可以在电子表格读取类中获取未知数据类型(即数据库记录)。非常感谢。欢迎提出任何其他建议

void class Main
{
    public class SpreadsheetRecord
    {
        public double volAvg;
        public double volOvr10;
        public double sumScore;
    }

    static string[] sheetHeads = { "Volume (10 Day Avg)", "Volume (Today/Avg 10 Day)",
            "Equity Summary Score from StarMine from Refinitiv" };

    SpreadsheetData<SpreadsheetRecord> sheetDat = new SpreadsheetData<SpreadsheetRecord>(sheetHeads);
    ...
}


public class SpreadsheetData<T> where T : new() //SpreadsheetData parses an "unknown" spreadsheet.xls file
{
    public Dictionary<string,T> SheetDB { get; private set; } //allow read access to database

    public SpreadsheetData<T>(string[] recordHeadings) //constructor to read in spreadsheet
    {
        ...
        using (IExcelDataReader excelReader = ExcelReaderFactory.CreateBinaryReader(sheetInputFile.OpenRead()))
        {...
            SheetDB = new Dictionary<string,T>(sheet1.Rows.Count); //create database instance
            T schemaRecord = new T(); //create database record instance

            FieldInfo[] recordFieldInfo = typeof(T).GetFields();
            for (int i = 1; i < result.Tables[0].Rows.Count; i++)
            {
                for (int j = 0; j < recordHeadings.Length; j++)
                    recordFieldInfo[j].SetValue(schemaRecord, sheet1.Rows[i][Column2RecordCrossIndx[j]]);
                SheetDB.Add(sheet1.Rows[i][indxOfSymbol].ToString(), schemaRecord); //store sheet data record
            }
            ...
        }
    }
}
void类主
{
公共类电子表格记录
{
公共双volAvg;
公共双volOvr10;
公开双满分;
}
静态字符串[]页眉={“卷(平均10天)”,“卷(今天/平均10天)”,
“来自Refinitiv的StarMine的股权汇总分数”};
电子表格数据表DAT=新的电子表格数据(表头);
...
}
公共类SpreadsheetData,其中T:new()//SpreadsheetData解析“未知”的电子表格.xls文件
{
公共字典SheetDB{get;private set;}//允许对数据库进行读取访问
公共电子表格数据(字符串[]记录标题)//要在电子表格中读取的构造函数
{
...
使用(IExcelDataReader excelReader=ExcelReaderFactory.CreateBaryReader(sheetInputFile.OpenRead()))
{...
SheetDB=newdictionary(sheet1.Rows.Count);//创建数据库实例
T schemaRecord=new T();//创建数据库记录实例
FieldInfo[]recordFieldInfo=typeof(T).GetFields();
对于(int i=1;i
我认为将类设置为泛型类并传递记录类型(电子表格记录)应该可行<代码>公共类电子表格数据,其中T:class您可以如上所述将其设置为通用。但我认为您出现的错误是因为您传递的
类型
您的
电子表格数据
接受而不是
类型
。可能是变更类型
publicstaticdynamiccast(dynamicobj,typecastto){returnconvert.ChangeType(obj,castTo);}
就像我认为使类成为泛型类和