Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在RESX文件中存储数据集_C#_.net_Resources_Resx - Fatal编程技术网

C# 在RESX文件中存储数据集

C# 在RESX文件中存储数据集,c#,.net,resources,resx,C#,.net,Resources,Resx,我对C#/.Net文件中的资源非常陌生 我需要在一个资源文件(*.RESX)中存储一个操作数据表,但我不知道怎么做 如果我用C语言进行硬编码,我会这样做: struct { int inputA; int outputB; } dataPoint; dataPoint myOpsData[] = { { 0, 2000}, {10, 4000}, {20, 6300},

我对C#/.Net文件中的资源非常陌生

我需要在一个资源文件(
*.RESX
)中存储一个操作数据表,但我不知道怎么做

如果我用C语言进行硬编码,我会这样做:

struct {
   int inputA;
   int outputB;
} dataPoint;

dataPoint myOpsData[] = { { 0,  2000},
                          {10,  4000},
                          {20,  6300},
                          {30,  8400},
                          {40, 10620} };
VisualStudio2010编辑器中最简单的方法是使用字符串,但这只是将字符串映射到值。如果我这样做,我的数据集将类似于:

Name:       Value:
-----       ------
PerfData1   { 0,  2000}
PerfData2   {10,  4000}
PerfData3   {20,  6300}
PerfData4   {30,  8400}
PerfData5   {40, 10620}
但是这种格式需要大量的解析、相关的验证和错误处理,而这些似乎是不必要的


如何在.RESX资源文件中表示数据点数组(或更复杂的数据类型)?

您最好使用app.config文件。您可以使用AppSettings部分添加字符串,显然您需要对其进行解析(与您尝试使用.RESX执行的操作类似)。但是,app.config文件允许您创建自定义XML节,以便更好地满足您的需求。使用配置文件最好的部分是能够更改配置数据,而无需实际重建应用程序

此外,请查看以下线程,但您将使用数据点代替页面:


您最好使用app.config文件。您可以使用AppSettings部分添加字符串,显然您需要对其进行解析(与您尝试使用.RESX执行的操作类似)。但是,app.config文件允许您创建自定义XML节,以便更好地满足您的需求。使用配置文件最好的部分是能够更改配置数据,而无需实际重建应用程序

此外,请查看以下线程,但您将使用数据点代替页面:


您不必使用ResX在程序集中嵌入一些静态数据

使用Visual Studio,您只需添加文件(添加新项或添加现有项),将生成操作(F4或属性窗口)更改为“嵌入式资源”,然后可以使用如下代码加载它(注意:应位于同一程序集中以避免安全问题):

我假设这里的文件是MyFile.MyExt,该文件直接添加到项目根目录中,因为VS会自动将当前项目名称空间(此处为ConsoleApplication1)添加到嵌入式资源路径中

如果您不确定此路径,我建议您使用诸如.NET reflector之类的工具,该工具能够显示程序集中的嵌入式资源名称和数据


这将为您获得一个流实例。因此,只要可以从流实例(MemoryStream、StreamReader、数据集、.NET或Xml序列化对象、位图等)加载/保存数据,就可以存储任何类型的数据。

您不必使用ResX在程序集中嵌入一些静态数据

使用Visual Studio,您只需添加文件(添加新项或添加现有项),将生成操作(F4或属性窗口)更改为“嵌入式资源”,然后可以使用如下代码加载它(注意:应位于同一程序集中以避免安全问题):

我假设这里的文件是MyFile.MyExt,该文件直接添加到项目根目录中,因为VS会自动将当前项目名称空间(此处为ConsoleApplication1)添加到嵌入式资源路径中

如果您不确定此路径,我建议您使用诸如.NET reflector之类的工具,该工具能够显示程序集中的嵌入式资源名称和数据


这将为您获得一个流实例。因此,您可以存储任何类型的数据,前提是您可以将其从/保存到流实例(MemoryStream、StreamReader、DataSet、.NET或Xml序列化对象、位图等)

是否有特定的原因需要使用资源文件来实现此目的?看起来这不适合你想要完成的任务。@e36M3:很好。我希望不时更改资源中的数据,并简单地重新构建程序集,将新数据合并到程序中。我想把这个传给一个非技术人员,所以要求他们更新数据库,或者在源代码中编辑硬编码表似乎不太实际。如果你有一个很好的选择,我一定会考虑它。你为什么要为此使用一个资源文件?看起来这不适合你想要完成的任务。@e36M3:很好。我希望不时更改资源中的数据,并简单地重新构建程序集,将新数据合并到程序中。我想把这个传给一个非技术人员,所以要求他们更新数据库,或者在源代码中编辑硬编码表似乎不太实际。如果你有一个好的选择,我一定会考虑它。谢谢,这使我走上了正确的轨道。我在我的项目中包含了一个JSON文本文件,并制作了一个DataContractJsonSerializer从中读取。谢谢,这让我走上了正确的道路。我在我的项目中包含了一个JSON文本文件,并制作了一个DataContractJsonSerializer从中读取。
using (Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("ConsoleApplication1.MyFile.MyExt"))
{
   // load data from stream
}