選択したフィールドで特定のクラスのオブジェクトをフィルター処理する機能があります。私が現在行っている方法は、フィールドに名前を付ける文字列を引数として関数に渡すことです。理想的には、辞書と同様に、この文字列を使用してオブジェクト内のフィールドを選択できるようにしたいと考えています (この機能は、たとえば JavaScript に存在します)。
したがって、ここに関数があります(関連するビットに切り詰められます):
private List<HangingArtBundle> ConstrainBundlesBy(List<HangingArtBundle> bundles, string valueString, string constraint)
{
List<HangingArtBundle> retBundles = new List<HangingArtBundle>();
List<string> values = new List<string>(valueString.Split(new char[] { '|' }));
foreach (HangingArtBundle bundle in bundles)
{
if (values.Contains(ConstrainedField(constraint, bundle)))
{
retBundles.Add(bundle);
}
}
return retBundles;
}
ConstrainedField(constraint, bundle)
その部分を のようなものに置き換えられるようにしたいと思いますbundle[constraint]
。 whereconstraint
はクラスのフィールドの名前ですHangingArtBundle
。代わりに、以下の関数を使用する必要があります。これには、必要に応じてフィールド名を手動で追加する必要があります。
private string ConstrainedField(string field, HangingArtBundle bundle)
{
if (field.Equals("Category"))
{
return bundle.Category;
}
else if (field.Equals("AUToolTab"))
{
return bundle.AUToolTab;
}
else
{
return "";
}
}
それがまったく役立つ場合、これがクラスです(本質的には単なる構造体です):
public class HangingArtBundle
{
public string CP { get; set; }
public string Title { get; set; }
public string Category { get; set; }
public string AUToolTab { get; set; }
public List<HangingArtEntry> Art { get; set; }
}
これは C# でエレガントな方法で行うことは可能ですか?