2016-09-28 3 views
-4

短いコードを使用するために書き直すことができるコードがあります。 コードはうまく動作しますが、コードが邪魔にならないように感じます。 ここではコードについて基本的に 辞書dict = settings.files; 発生箇所はいくつかのプロパティを持つオブジェクトですが、1つは、ファイル名短いコードを使用するためにforループを書き直す方法

string fileNameShort; 
List<Common.Occurences> filteredList = new List<Occurences>(); 


//Lookup the right dictionary item for given filename in occurences 
for (int j = 0; j < settings.files.Count; j++) 
{ 
    if (occurences.FileName.StartsWith(dict.Keys.ElementAt(j))) 
    { 
     fileNameShort = dict.Keys.ElementAt(j); 

     if (dict[fileNameShort]) 
     { 
      filteredList.Add(occurences); 
      break; 
     } 
    } 
} 
+0

「dict」とは何ですか? –

+0

辞書です – tony

+0

タイプは.......? –

答えて

0
filteredList = (from entry in dict where entry.Value && occurence.FileName.StartsWith(entry.Key) select occurence).ToList(); 

多分どこかに改行を挿入する参考になると命名されます。

編集:何しかし、私を打つことは、これはあなたのコード内のインデックスjに依存しないため、リストには、同じオブジェクトoccurencesの唯一の繰り返しが含まれているということです。私には少なくとも -

+0

たとえば、occurences.FileName = "babspaylink_cashit-bpti.1.log"ですが、settings.filesには1つの場所に{babspaylink、true}があり、keyはbapspaylinkで値はtrueです。 – tony

+0

したがって、辞書のキーと時々ファイル名が異なる場合は、 – tony

+0

@tonyです。 {babspaylink、true}と{babspay、true}を辞書に入力すると、同じ項目の2倍のリストが表示されます。リストには2つの異なる項目が含まれることはありません。そのため、リストを使用することは悪い考えです。 – Georg

0

これは、開始

foreach(var j in settings.files.Where(x => occurences.Filename.StartsWith(x.Key)) 
{ 
    filteredList.Add(j); 
} 

が、それはどこにもあなたのコードは意味がありませんので、あなたが必要なものに近いです。

+0

public class Occurences
{ 公開ストリングTimeStamp {get;セット; } 公開ストリングFileName {get;セット; } 公開ストリングOccurance {get;セット; } パブリック文字列ForeColor {get;セット; } 公開ストリングBackColor {get;セット; } public int Index {get;セット; } } – tony

+0

辞書がファイル名全体に当てはまる場合は、なぜStartsWith()を使用しますか? – else

+0

また、辞書は必要ありません。あなたはリスト使用を使用して、FileNameプロパティにアクセスすることができます – else

関連する問題