【问题标题】:C# Pull items from array based on stringC#根据字符串从数组中拉取项目
【发布时间】:2021-06-12 04:33:29
【问题描述】:

不确定这是否是最好的方法,但我已经从一个 excel 文件中的值创建了一个二维数组,我想将其用作我的应用程序中的变量,控制在何处查找文件路径和文件等内容.

数组已构建,文件中的所有数据都包含在其中:

   for (int i = 0; i <= bindingSourceConfig.Count - 1; i++) // for each row in the binding source data
   {
       for (int j = 0; j <= 2 - 1; j++) // for each column, only need one and 2
       {
       System_Var_Array[i, j] = (bindingSourceConfig.DataSource as DataTable).Rows[i][j].ToString();
       }
   }

现在我希望能够在数组中查找我的变量“Project_Directory”并让它返回“C:\Users\User\Dropbox\default\master\support”

这可能吗?

编辑 1: 这样做的目的是创建一个易于定制/可配置的多项目环境,任何人都可以简单地编辑 excel 文件中的路径并将该文件导入应用程序。

如果不先从 Excel 数据中提取“变量”和“值”,我无法在班级级别设置这些“变量”。

有没有在 bindingSource 中查找“变量”的简单方法?

编辑 2:

debugger image

【问题讨论】:

  • 可能,是的,只需循环遍历数组,尽管您可能想使用 Dictionary。
  • 为什么需要System_Var_Array 和这样的for 循环,因为您可以选择直接在RowsRows.Cast&lt;&gt;().Select(...).ToList()ToArray 上工作?你的用途和目的是什么?否则,您可以使用 Linq Where 或者 FirstOrDefault 在数据中进行搜索。
  • 这能回答你的问题吗? How to search in 2D array by LINQ ?[version2]
  • 你在重新发明轮子。 .NET 长期以来一直支持从 XML 和 JSON 存储和加载应用程序设置。使用原生解决方案,不要自己编写。

标签: c# multidimensional-array


【解决方案1】:
var name = "Project_Directory";
string value = null;
for (int i = 0; i<System_Var_Array.GetLength(0); i++) {
   if (System_Var_Array[i,0]==name) {
      value = System_Var_Array[i,1];
      break;
   }
}

循环停止后,value 将包含您需要的数据,假设它存在(否则它将为空。如果您使用 Dictionary&lt;string,string&gt; 生成它,则使用更简单的方法是

var systemVars = new Dictionary<string,string>();
var dt = bindingSourceConfig.DataSource as DataTable;
for (int i = 0; i < bindingSourceConfig.Count; i++) // for each row in the binding source data
   {
       systemVars[dt.Rows[i][0].ToString()] = dt.Rows[i][1].ToString();
   }

然后要获取“Project_Directory”的值,只需调用

var value = systemVars["Project_Directory"];

【讨论】:

  • 字典似乎是一种更简单的方法,看起来可以工作,但是我收到一个错误“字典中不存在给定的键”
  • 在检索数据时不会在这里崩溃 systemVars[dt.Rows[i][0]] = systemVars[dt.Rows[i][1]];
  • 试过 .ToString() 并且不要怀疑它对你的工作。事实上,它返回值 [i][1] 但仍然崩溃并抛出 key not found 错误。将编辑我的问题以显示调试器的屏幕截图
  • 罪魁祸首是那条线。这对我有用:systemVars.Add(dt.Rows[i][0].ToString(),dt.Rows[i][1].ToString());
【解决方案2】:

您应该为此使用 appsettings 文件,它是此类事情的 dotnet 标准解决方案。请参阅https://docs.microsoft.com/en-us/dotnet/core/extensions/configuration

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多