0

我有一个简单的问题。在我用 c# 创建字典期间,一半的字典包含问号。这是我的情况:在此处输入图像描述

源代码:

/// <summary>
/// Get Member
/// </summary>
/// <param name="Binder"></param>
/// <param name="Result"></param>
/// <returns></returns>
public override bool TryGetMember(GetMemberBinder Binder, out object Result)
{
    if (Binder.Name == "AsDictionary")
    {
        IDictionary<string, string> cValues = new Dictionary<string, string>();

        foreach (var cValue in myValues)
        {
            string cVal = "";
            if (cValue.Value == null)
            {
                cVal = "";
            }
            else
            {
                cVal = cValue.Value.ToString();
            }

            cValues.Add(cValue.Key, cVal);
        }

        Result = cValues;
        return true;
    }

    int cCount = myValues.Where(Item => Item.Key.ToLower() == Binder.Name.ToLower()).ToList().Count;

    if (cCount == 0)
    {
        Result = null;
        return false;
    }
    else
    {
        Result = myValues.Where(Item => Item.Key.ToLower() == Binder.Name.ToLower()).First().Value;
    }

    return true;
}

myValues 也是一个 ObservableCollection:

private ObservableCollection<DynamicSqlValue> myValues;

DynamicSqlValue 是一个非常简单的类:

public class DynamicSqlValue
{
    public string Key
    {
        get;
        set;
    }

    public object Value
    {
        get;
        set;
    }
}

谢谢您的帮助!

4

2 回答 2

1

一定是某种视觉工作室问题,或者您可能内存不足。您是否尝试过记录这些值?

我会比 Patryk 更进一步,问你为什么不做 myValues.ToDictionary。此外,.Where、.ToList 和 .Count 应该很简单:

 myValues.Any(kvp => kvp.Key.Equals(Binder.Name, StringComparison.InvariantCultureIgnoreCase))

该函数实际上应该只有 4 或 5 行代码。

于 2013-11-09T23:41:17.117 回答
0

这不是您的问题的答案(对此感到抱歉),但我对您的代码有一些重构提示:

让你的 foreach 像这样:

foreach (var cValue in myValues)
{
    cValues.Add(cValue.Key, cValue.Value != null ? cValue.Value.ToString() : string.Empty);
}

并从 linq 查询创建局部变量:

var binderMyValues = myValues.Where(Item => Item.Key.ToLower() == Binder.Name.ToLower());

像使用它一样

int cCount = binderMyValues.ToList().Count;

或者...

Result = binderMyValues.First().Value;
于 2013-11-09T16:22:25.233 回答