C# 在运行时创建类
我有一个sql数据库,每天由一些c#代码写入,其中包含特定日期的股票信息 字段:股票代码、持有人编号、值、日期 每天都会有一条带有日期戳的新记录添加到数据库中 我需要能够创建以下格式的列表C# 在运行时创建类,c#,list,C#,List,我有一个sql数据库,每天由一些c#代码写入,其中包含特定日期的股票信息 字段:股票代码、持有人编号、值、日期 每天都会有一条带有日期戳的新记录添加到数据库中 我需要能够创建以下格式的列表 date1 date2 date3 stock1 100 104 110 stock2 105 100 99 stock3 150 150 80 等等 然而,该列表似乎必须是动态的,因为字段会根据系统中每个
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类?只是开玩笑。我看他需要一个自定义类或元组。谢谢你的评论!反思当然是一个解决方案,但在这里可能会有些过火。只是给出一些选择:)反射确实是一个解决方案,但在这里可能有点过头了。同意。仅给出选项:)