C# 在运行时创建类

C# 在运行时创建类,c#,list,C#,List,我有一个sql数据库,每天由一些c#代码写入,其中包含特定日期的股票信息 字段:股票代码、持有人编号、值、日期 每天都会有一条带有日期戳的新记录添加到数据库中 我需要能够创建以下格式的列表 date1 date2 date3 stock1 100 104 110 stock2 105 100 99 stock3 150 150 80 等等 然而,该列表似乎必须是动态的,因为字段会根据系统中每个

我有一个sql数据库,每天由一些c#代码写入,其中包含特定日期的股票信息

字段:股票代码、持有人编号、值、日期

每天都会有一条带有日期戳的新记录添加到数据库中

我需要能够创建以下格式的列表

         date1   date2   date3
 stock1   100     104      110
 stock2   105     100      99 
 stock3   150     150      80 
等等

然而,该列表似乎必须是动态的,因为字段会根据系统中每个股票的日期数而变化

所以我不能使用这样的类

private class Stocks: ExcelReport
{
  public String StockCode { get; set; }
  public Double TotalQtyHeld { get; set; }
  public Double TotalValueOfStock { get; set; }
  public DateTime Date { get; set; }
}
谢谢你的帮助


谢谢

您不能创建一个可以保存日期和值的类,如下所示:

private class StockValue
{
  public Double TotalQtyHeld { get; set; }
  public Double TotalValueOfStock { get; set; }
  public DateTime Date { get; set; }
}

private class Stocks: ExcelReport
{
  public String StockCode { get; set; }
  public IList<StockValue> Values {get;set;}
}
私有类股票价值
{
公共双TotalQtyHild{get;set;}
股票{get;set;}的公共双重TotalValueOfStock{get;set;}
公共日期时间日期{get;set;}
}
私人类股:ExcelReport
{
公共字符串StockCode{get;set;}
公共IList值{get;set;}
}

您不能创建一个可以保存日期和值的类,如下所示:

private class StockValue
{
  public Double TotalQtyHeld { get; set; }
  public Double TotalValueOfStock { get; set; }
  public DateTime Date { get; set; }
}

private class Stocks: ExcelReport
{
  public String StockCode { get; set; }
  public IList<StockValue> Values {get;set;}
}
私有类股票价值
{
公共双TotalQtyHild{get;set;}
股票{get;set;}的公共双重TotalValueOfStock{get;set;}
公共日期时间日期{get;set;}
}
私人类股:ExcelReport
{
公共字符串StockCode{get;set;}
公共IList值{get;set;}
}

我不确定我是否理解,因此如果我的回答与您的要求不符,请原谅。你不是只需要一个值列表吗?类生成听起来像一个天才的解决方案,但对于任务来说太复杂了

创建日期/股票信息值(或对象)列表。您可以使用
元组作为类型或创建自己的自定义类:

class DataValue
{
    public DateTime Date { get; set; }
    public double Value { get; set; }
}

然后,只需使用
列表

我不确定是否理解,因此如果我的回答与您的要求不符,请原谅。你不是只需要一个值列表吗?类生成听起来像一个天才的解决方案,但对于任务来说太复杂了

创建日期/股票信息值(或对象)列表。您可以使用
元组作为类型或创建自己的自定义类:

class DataValue
{
    public DateTime Date { get; set; }
    public double Value { get; set; }
}

然后只需使用
列表

只要有2-3个值,键值/元组列表就可以满足您的需要,如果您需要更多信息,请使用Jeffery解决方案

private class Stocks : ExcelReport
    {
        public String StockCode { get; set; }
        public List<Tuple<DateTime, Double, Double>> StocksValues { get; set; }
    }
私人类股票:ExcelReport
{
公共字符串StockCode{get;set;}
公共列表StocksValues{get;set;}
}

只要有2-3个值,键值/元组列表就可以满足您的需要,如果您需要更多信息,请使用Jeffery解决方案

private class Stocks : ExcelReport
    {
        public String StockCode { get; set; }
        public List<Tuple<DateTime, Double, Double>> StocksValues { get; set; }
    }
私人类股票:ExcelReport
{
公共字符串StockCode{get;set;}
公共列表StocksValues{get;set;}
}

并不是说这是您使用的最佳选项,但是您可以在运行时编译自己的类并加载它们。下面是一个如何将文本编译成DLL的示例

        CSharpCodeProvider codeProvider = new CSharpCodeProvider();

        System.CodeDom.Compiler.CompilerParameters parameters = new CompilerParameters();
        parameters.GenerateExecutable = false;
        parameters.GenerateInMemory = false;
        parameters.WarningLevel = 3;
        parameters.CompilerOptions = "/optimize";
        parameters.OutputAssembly = "C:\\test\\test.dll";
        parameters.ReferencedAssemblies.Add("Microsoft.CSharp.dll");
        parameters.ReferencedAssemblies.Add("System.dll");
        parameters.ReferencedAssemblies.Add("System.Core.dll");
        parameters.ReferencedAssemblies.Add("System.Data.dll");
        parameters.ReferencedAssemblies.Add("System.Data.DataSetExtensions.dll");
        parameters.ReferencedAssemblies.Add("System.XML.dll");
        parameters.ReferencedAssemblies.Add("System.XML.Linq.dll");

        CompilerResults results = codeProvider.CompileAssemblyFromSource(parameters, _BaseCode.ToArray());

        if (results.Errors.Count > 0)
        {
            LogError(results.Errors[0].ErrorText, "Error Compiling", null, "", ErrorLevel.Critical);
            throw new Exception("Error Compiling..");
        }
上面的代码只是我用来编译代码的更大方法的一小部分。某些变量不存在等。将其用作基础并查找所使用的方法。编译代码后,可以加载DLL并创建实例。下面的代码显示了一些示例

System.Reflection.Assembly _A = System.Reflection.Assembly.LoadFile(FileLocation);

return (T)_A.CreateInstance(_ClassName, true, System.Reflection.BindingFlags.CreateInstance, null, Arguments.ToArray(), System.Globalization.CultureInfo.CurrentCulture, null);

不要说这是您使用的最佳选项,但是您可以在运行时编译自己的类并加载它们。下面是一个如何将文本编译成DLL的示例

        CSharpCodeProvider codeProvider = new CSharpCodeProvider();

        System.CodeDom.Compiler.CompilerParameters parameters = new CompilerParameters();
        parameters.GenerateExecutable = false;
        parameters.GenerateInMemory = false;
        parameters.WarningLevel = 3;
        parameters.CompilerOptions = "/optimize";
        parameters.OutputAssembly = "C:\\test\\test.dll";
        parameters.ReferencedAssemblies.Add("Microsoft.CSharp.dll");
        parameters.ReferencedAssemblies.Add("System.dll");
        parameters.ReferencedAssemblies.Add("System.Core.dll");
        parameters.ReferencedAssemblies.Add("System.Data.dll");
        parameters.ReferencedAssemblies.Add("System.Data.DataSetExtensions.dll");
        parameters.ReferencedAssemblies.Add("System.XML.dll");
        parameters.ReferencedAssemblies.Add("System.XML.Linq.dll");

        CompilerResults results = codeProvider.CompileAssemblyFromSource(parameters, _BaseCode.ToArray());

        if (results.Errors.Count > 0)
        {
            LogError(results.Errors[0].ErrorText, "Error Compiling", null, "", ErrorLevel.Critical);
            throw new Exception("Error Compiling..");
        }
上面的代码只是我用来编译代码的更大方法的一小部分。某些变量不存在等。将其用作基础并查找所使用的方法。编译代码后,可以加载DLL并创建实例。下面的代码显示了一些示例

System.Reflection.Assembly _A = System.Reflection.Assembly.LoadFile(FileLocation);

return (T)_A.CreateInstance(_ClassName, true, System.Reflection.BindingFlags.CreateInstance, null, Arguments.ToArray(), System.Globalization.CultureInfo.CurrentCulture, null);

你确定不能使用这样的类吗?似乎您想创建一个
列表
,其中列表的大小是数据库中的日期数。如果我理解正确,那么您只需要列表日期,并且可以用所需的精确日期数填充它们。您确定不能使用这样的类吗?似乎您想创建一个
列表
,其中列表的大小是数据库中的日期数。如果我理解正确,然后你只需要列出日期,它们可以被精确的日期数所填充。你如何通过列出日期时间信息来记录数量信息?哈哈,好问题!使用神奇的DateTime类?只是开玩笑。我看他需要一个自定义类或元组。谢谢你的评论!你会如何记录数量信息,只是有一个列表的日期时间信息?哈哈好问题!使用神奇的DateTime类?只是开玩笑。我看他需要一个自定义类或元组。谢谢你的评论!反思当然是一个解决方案,但在这里可能会有些过火。只是给出一些选择:)反射确实是一个解决方案,但在这里可能有点过头了。同意。仅给出选项:)