【问题标题】:Foreach Loop using KVP to iterate through a Multi-Dimensional ListForeach 循环使用 KVP 遍历多维列表
【发布时间】:2014-11-26 14:13:28
【问题描述】:

我想使用 foreach k, v 对循环来遍历多维列表,并将这些值输出到其他地方。代码如下:

public class LogTable
{
    public string FunctionName { get; set; }
    public string LogTime { get; set; }
}

public class TableVars
{
    public List<LogTable> loggingTable { get; set; }
    public TableVars()
    {
        loggingTable = new List<LogTable>();
    }
    public void createLogList()
    {
        loggingTable = new List<LogTable>();
    }
}

foreach( KeyValuePair<string, string> kvp in tablevars.loggingTable)
{
    // output would go here. I haven't looked it up yet but I assume it's something 
    // along the lines of var = k var2 = v? Please correct me if I'm wrong.     
}

当我在“foreach”上运行鼠标时,我收到一条警告消息 - “无法将类型 'DataObjects.LogTable' 转换为 'System.Collections.Generic.KeyValuePair。我该如何解决这个问题,或者有没有更有效的方法来实现相同的目标?

谢谢!

我应该添加更多上下文,抱歉。我正在尝试返回我通过以下方式添加的属性“FunctionName”和“LogTime”中的两个不同值:

var tablevars = new TableVars(); tablevars.loggingTable.Add(new LogTable { FunctionName = errorvalue, LogTime = logtime });

为了更准确地指定,foreach k, v 循环的目的是获取 FunctionName 和 LogTime 的每个不同属性,并将它们输入到 SQL Server 中的数据库中。这就是为什么区分 k、v(或 FunctionName、LogTime)很重要的原因。再次,如果我错了,请纠正我。

【问题讨论】:

  • 您可以通过在迭代 List&lt;LogTable&gt; 时将 foreach 循环变量更改为 LogTable 来解决此问题。为什么你认为它应该是KeyValuePair&lt;string,string&gt;
  • 在这种情况下,如何在 List 中的两个不同参数之间指定?我把它想象成这样:
  • 简单地访问属性有什么问题?
  • 糟糕,抱歉。我正在像这样可视化它 - LogTable = { key = "key" value = "value" } 我认为这是通过使用具有 FunctionName 和 LogTime 的 LogTable 类来完成的
  • 我正在尝试将两个不同的属性添加到单独数据库中的两个不同列中。它们需要区别开来。如果我可以在不使用 k、v 的情况下做到这一点,我该怎么做?感谢您的帮助:)

标签: c# list foreach visual-studio-2013 keyvaluepair


【解决方案1】:

您不能使用KeyValuePair&lt;&gt;,因为您没有枚举Dictionary&lt;&gt;。但你不需要,只需这样做:

foreach(LogTable logTable in tablevars.loggingTable)
{
    // do whatever with logTable.FunctionName and logTable.LogTime   
}

【讨论】:

    【解决方案2】:

    要么更改您的 foreach 以迭代 List&lt;LogTable&gt;

    foreach( LogTable lt in tablevars.loggingTable)
     {...}
    

    使用KeyValuePair 而不是创建类LogTable

    public class TableVars
    {
        public Dictionary<string,string> loggingTable { get; set; }
        public TableVars()
        {
            loggingTable = new Dictionary<string,string>();
        }
        public void createLogList()
        {
            loggingTable = new Dictionary<string, string>();
        }
    }
    
    foreach( KeyValuePair<string, string> kvp in tablevars.loggingTable)
    {
        //loggingTagle is now a KeyValuePair 
    }
    

    【讨论】:

    • 我更新了我的问题以提供一些上下文。你认为在这种情况下字典比列表更好吗?
    猜你喜欢
    • 1970-01-01
    • 2013-03-26
    • 2010-10-24
    • 2011-05-25
    • 2015-04-13
    • 2014-07-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多