在C#中组合ViewStates或在C#中组合通用列表

时间:2016-03-01 11:10:57

标签: c# generics

我有以下两个 ViewStates 1存储所有开始日期,另一个存储特定事件的所有结束日期:

private List<DateTime> SelectedStartDates
    {
        get
        {
            if (ViewState["SelectedStartDates"] != null)
                return (List<DateTime>)ViewState["SelectedStartDates"];

            return new List<DateTime>();
        }
        set
        {
            ViewState["SelectedStartDates"] = value;
        }
    }

    private List<DateTime> SelectedEndDates
    {
        get
        {
            if (ViewState["SelectedEndDates"] != null)
                return (List<DateTime>)ViewState["SelectedEndDates"];

            return new List<DateTime>();
        }
        set
        {
            ViewState["SelectedEndDates"] = value;
        }
    }

问题:

我是否可以通过以下方式在这两个ViewStates中存储组合的值列表:

List[0] = first value of Start date

List[1] = first value of End date

List[2] = second value of Start date

List[3] = second value of End date

.

.

. 

依此类推,直至 ViewState 中两个列表的最后一个值。

我能想到的另一种方法是以上述方式再次组合 ViewState 返回的通用列表

另外,我想将重复值保留在组合列表中

有解决办法吗?

2 个答案:

答案 0 :(得分:2)

你可以这样做:

List<DateTime> combine = new List<DateTime>();
for (int i = 0; i < SelectedStartDates.Count; i++)
{
    combine.Add(SelectedStartDates[i]);
    combine.Add(SelectedEndDates[i]);
}

如果两个输入列表是List<string>类型,并且这些列表中的每个项都有效DateTime(例如,它由(DateTime).ToString()函数插入,则可以使用:< / p>

List<string> SelectedStartDates = new System.Collections.Generic.List<string>();
List<string> SelectedEndDates = new System.Collections.Generic.List<string>();

List<DateTime> combine = new List<DateTime>();
for (int i = 0; i < SelectedStartDates.Count; i++)
{
    combine.Add(DateTime.Parse(SelectedStartDates[i]));
    combine.Add(DateTime.Parse(SelectedEndDates[i]));
}

您不确定字符串是否有效DateTime格式,您可以使用DateTime.TryParse

您可以阅读:

答案 1 :(得分:1)

如果你想像你说的那样,直到两个列表的最小数量,那么你可以使用Zip()方法。即:

SelectedStartDates.Zip( SelectedEndDates, (s, e) => new 
   {Start = s, End = e});