你如何使用字符串作为索引?

时间:2010-09-10 12:44:33

标签: c# string indexing

上午。

问题:
我有一个名为Reports的课程。两个构造函数。一个不允许参数,另一个是字符串数组。字符串数组应该是他们想要显示的报告。我想做的是以下几点:

string strSQL = this.Queries[strReportName];

我觉得这是可能的,因为在我正在使用的dataGridView中,我得到了列索引:

int nColumnIndex = dgvParts.Columns[strColumnName].Index;

这两个示例都使用字符串来确定它们检索的数组中的值,但我不确定如何执行此操作。谁能给我一些帮助?任何和所有的帮助表示赞赏。

编辑和mods:是的,报告部分与我关于动态加载DLL的其他帖子松散地联系,但我想保持另一个开放。我的老板和我决定短期,我们只有一个DLL,一切都是硬编码的,但从长远来看,我们希望动态地删除DLL作为报告,所以请不要将其标记为重复。我计划本周末试图在另一个线程中实现给我的方法。感谢。

编辑 - 问题的第2部分:好的,这是我现在的课程:

public class Queries
{
  #region Report Queries
    #region Missing Code
      string strMissingCode = "SELECT * FROM PARTS WHERE CODE IS NULL OR CODE = ''";
    #endregion
  #endregion
}

我想把它改成这样的东西:

public class Queries : Dictionary<string, string>
{
}

但我不希望他们必须使用构造函数来实例化它。我想要静态排序,所以我可以运行这样的代码:

class Reports
{
  private List<ReportRecord> _lstRecrods = new List<ReportRecord>();
  public List<ReportRecord> Records { get { return _lstRecords; } }

  public Reports(string[] strDisplayedReports)
  {
    foreach (string strReportTitle in strDisplayedReports)
    {
      this.BuildReportList(strReportTitle);
    }
  }

  private void BuildReportList(string strReportTitle)
  {
    using (DataSet ds = Database.GetDataSet(Queries[strReportTitle]))
    {
      ...
    }
  }
}

如何将其静态排序到我不必实例化查询的位置?谢谢你们和男孩们。

6 个答案:

答案 0 :(得分:14)

我认为您正在寻找以下内容:

public class Reports
{
    System.Collections.Generic.IDictionary<string,string> queries;

    public string this[string key]
    {
        get
        {
            return this.queries[key];
        }
    }
}

有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/aa288464(VS.71).aspx

如果您不需要在Reports类中添加任何其他功能,那么只需像其他人发布的那样使用词典。

答案 1 :(得分:10)

Dictionary可以使用字符串作为“索引”(实际上是键)。

答案 2 :(得分:2)

答案 3 :(得分:0)

this.Queries.SingleOrDefault(x =&gt; x.Name == strReportName)不起作用?如果没有,您可以创建一个扩展方法,将该代码隐藏在索引器[]

答案 4 :(得分:0)

您可以使用Array.IndexOf(this.Queries,strReportName);

答案 5 :(得分:-2)

c#中的基本数组是基于索引的,不能使用字符串访问器。

这有效:

string[] someArray = {"query 1", "query 2"};
string myQuery = someArray[1];

这不是:

myQuery = someArray["some value"];

使用Dictionary类,它允许任何类型的键,包括复杂类型。