2013-11-09 109 views
0

我有一個簡單的問題。在我在c#中創建一個字典期間,字典的一半包含問號。這裏是我的situration:enter image description here該詞典的網頁包含問題描述

源碼:

/// <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; 
    } 
} 

感謝您幫幫我!

+3

將您的代碼顯示爲文本,而不是圖像。 –

+0

爲什麼你使用對象作爲結果?你爲什麼不使用Dictionary? – wudzik

+0

「將您的代碼顯示爲文本,而不是圖像。」:完成 「爲什麼要將對象用作結果?」:因爲結果並不總是一個字典。 – BendEg

回答

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; 
1

一定是某種視覺工作室問題或者你正在運行內存不足。你有沒有嘗試記錄值?

我會比Patryk走得更遠,問你爲什麼不做myValues.ToDictionary。而且,。哪裏,.ToList和.Count之間應該是簡單:

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

該函數應該真正僅像4個或5行代碼。

+0

謝謝你的回答。我已記錄所有的值,他們是正確的。我會嘗試你的解決方案!謝謝! – BendEg