私はそうのようなページにフィルタを追加する方法必要:私はフィルタのセット量を持っており、彼らはプロパティが含ま静的なクラスまたは構造体以外のものを使用すべきですか?
カタログ/サイズ - 中/色レッド/
をすぐに変更することはほとんどありません。これらのフィルタを処理するために、私は列挙型を決定しましたが、null、拡張メソッド、およびその他のプロパティを組み込む必要があったため、これは非常に狡猾です。
最後に私はこのStackoverflow answerを見て、構造体を使用することを提案しました。ここに私が組み込んだ例があります:
public struct Color
{
private int id;
private bool isDef;
private Color(int value) { id = value; isDef = true; }
public bool Hasvalue { get { return isDef; } }
public bool IsNull { get { return !isDef; } }
public string Name
{
get
{
switch(id)
{
case 0: return "None";
case 1: return "Black";
case 2: return "Blue";
case 3: return "Green";
case 4: return "Orange";
case 5: return "Pink";
case 6: return "Brown";
case 7: return "White";
case 8: return "Yellow";
case 9: return "Gray";
case 10: return "Purple";
case 11: return "Red";
default: return null;
}
}
}
public string Abbreviation
{
get
{
switch(id)
{
case 1: return "BK";
case 2: return "BL";
case 3: return "GR";
case 4: return "OR";
case 5: return "PK";
case 6: return "BN";
case 7: return "WT";
case 8: return "YL";
case 9: return "GY";
case 10: return "PR";
case 11: return "RD";
default: return null;
}
}
}
public static IEnumerable<Color> GetValues()
{
yield return Color.None;
yield return Color.Black;
yield return Color.Blue;
yield return Color.Green;
yield return Color.Orange;
yield return Color.Pink;
yield return Color.Brown;
yield return Color.White;
yield return Color.Yellow;
yield return Color.Gray;
yield return Color.Purple;
yield return Color.Red;
}
public static Color Parse(string value)
{
if (String.IsNullOrEmpty(value))
return Color.None;
foreach (var c in GetValues())
{
if (String.Equals(c.Name, value, StringComparison.Ordinal))
return c;
}
return Color.None;
}
public override bool Equals(object obj)
{
if(!(obj is Color))
return false;
Color color = (Color)obj;
return color.Name.Equals(this.Name, StringComparison.Ordinal);
}
public static Color None = new Color(0);
public static Color Black = new Color(1);
public static Color Blue = new Color(2);
public static Color Green = new Color(3);
public static Color Orange = new Color(4);
public static Color Pink = new Color(5);
public static Color Brown = new Color(6);
public static Color White = new Color(7);
public static Color Yellow = new Color(8);
public static Color Gray = new Color(9);
public static Color Purple = new Color(10);
public static Color Red = new Color(11);
}
これらはうまくいきますが、何らかの形で正しく感じられません。たとえば、各構造体に同じコードを書く必要があります。これは多くのコードのようです。再利用可能なコードを継承したり、データを何らかの形でインターフェースに収めたりする方がはるかに簡単です。
これを行うには良い方法がありますか?私は静的クラスを使用しようとしましたが、私の構造体に似た機能を持つものを構築する方法については頭を悩ますことができませんでした。
申し訳ありません申し訳ありませんが、私が投稿することができないようであれば、初めてのことです。
structはokです(小さくて不変で、GetHashCodeと==もありません)。しかし、あなたが表示していない他のコードに問題があるように見えるので、何かを提案するのは難しいです。質問に投稿するには、この色のコードの90%を安全に切断することができます。 –
フィルターコードを教えてください。ところで、なぜあなたは 'System.Drawing.Color'を使用していませんか? –
私は文句が混乱につながったと思います。私のフィルタコードは問題ありません。同じコードをたくさん書くことについての部分は、構造体そのものを参照していました。ほとんど同じコードを持つ6つの長い構造体を書くことは少し非効率的であるように見えました。 – Eco