0

この質問の背景が必要ない場合は、以下の質問に進んでください。

最初のコード ブロックでわかるように、スタイル ディクショナリに渡されるパラメーターとして定数を使用しています。

私は(今では)型が で広く使用されていることを知っている.netので、辞書が型ではなく専用の型として渡されるパラメーターを受け入れるように指定する方法を知りたいstringです。

これは、 types について、私にとってもう 1 つの小さな教訓になります。

                         //string                //string 
html.StyleDict.Add(Stl.Prop.BgColor, Stl.Vals.Clr.Aquamarine);

今までは、(スタイル ディクショナリ) 文字列をパラメーターとして使用するために渡していたので、シンプルに保ちながら仕事をさせることができました.net...このクラスを作成したとき、何が何であるか、またはそれらをどのように使用するかを学ぶことさえ考えられませんでしtypesた。

したがって、このシナリオに関しては、実装と使用法は非常に単純なタスクである必要があります(一部のユーザーにとっては、実際にはすべてではないにしてもほとんどの場合 (:)、 string の代わりにカスタム型を使用して実装を変換する必要があります。

質問は: スタイル クラスを作成する方法?

...そのため、最終的にはそのC#スタイリングタスクに文字列を渡すことになりますが、辞書ではパラメーターを の型として渡すことができます。styleこれは、html css スタイリングがコードビハインドによって行われるためです。ただし、スタイル ディクショナリにデータを入力するときは、カスタム Style クラスを使用します。

                     //styleType                //styleType 
html.StyleDict.Add(Stl.Prop.BgColor, Stl.Vals.Clr.Aquamarine);

例えば。

これは、HTML マークアップを生成するループを使用して要素のバックラウンドを変更するために使用しているクラスであるため、ループ内の現在の要素の他のスタイル プロパティと共にループのカウンターを渡しています。

(トピックから少し外れていますが、この質問の意味を説明するために使用例を示す必要がありました)

...それはまた、スタイルの辞書が使用されるようになる場所です.

public sealed class html
{
      //  current Typless Dictionary
    public static Dictionary<string, string> StyleDict = new Dictionary<string, string>();


        // future dictionary (: , naturally it wouldnt work with the parameters as it is now (see relevant Styles Class
    public static Dictionary<Styles.Prop, Styles.Vals> StyleDict = new Dictionary<Stl.Prop, Stl.Vals>();
    public static string DynamicStyle_Generator
    (
        int LoopCounter = -1,
        Dictionary<string, string> StyleAttributeDict = null
    )
    {
        string BaseStyle = "", Terminator = "'", BgCol = "";

        StringBuilder StylerSB = new StringBuilder();


        BgCol = "";
        bool bgcolAlternator;

            if (LoopCounter >= 0)
            {
                LoopCounter++ ;
                bgcolAlternator = (RowCounter % 2) == 0;

                    if (bgcolAlternator)
                        BgCol = "#70878F";

                    else BgCol = "#E6E6B8";
             }

        BaseStyle = string.Format("style='background-color:{0};", BgCol);
        return string.Concat(BaseStyle, StyleDict, Terminator);

    }
        Lsts.StlsDict.Add(Stl.Prop.BgColor, Stl.Vals.Clr.Aquamarine);

        public Dictionary<Stl.Prop, Stl.Vals> StlsDict = new Dictionary<Stl.Prop, Stl.Vals>();


    public static class Styles
    {

        public sealed class Props
        {
            public static string pBgUrl1(string fileName)
            {
                return "url('images/" + fileName + "')";
            }
            /// <summary>
            /// Specifies the HTML backgroundimage style.
            /// </summary>
            public static readonly string BgColor = "Background-Color ",

            /// <summary>
            ///     Specifies the HTML backgroundimage style.
            /// </summary>
            BackgroundImage = "Background-image ",

            /// <summary>
            ///     Specifies the HTML bordercollapse style.
            /// </summary>
            BorderCollapse = "BorderCollapse ",

            /// <summary>
            ///     Specifies the HTML bordercolor style.
            ///</summary>
            BorderColor = "BorderColor ",

            /// <summary>
            ///     Specifies the HTML borderstyle style.
            ///     </summary>        
            BorderStyle = "BorderStyle ",
     }


        public sealed class Vals
        {

            public class fontNames
            {
                public const string Aharoni = "Aharoni",
                                    Andalus = "Andalus",
                                    AngsanaNew = "Angsana New",
                                    AngsanaUPC = "AngsanaUPC",
                                    Aparajita = "Aparajita";
            }


            public class Color
            {
                public const string AliceBlue = "AliceBlue";
                public const string AntiqueWhite = "AntiqueWhite";
                public const string Aqua = "Aqua";
                public const string Aquamarine = "Aquamarine";
                public const string Azure = "Azure";
            }
       }
}

私が自分の型を渡すために使用できる別の方法(条件は同じ辞書を使用することです)私が思いつくことができる唯一のことは、パラメータに設定されたデフォルト値を使用することです

while writing this , i could have thought of this actually 


Dictionary<T,T> StyleDict = new Dictionary<T, T>();

文字列に変換するだけではありません!(動作していません)

    public static string DynamicStyle_Generator
    (
        int LoopCounter = -1,
        Dictionary<Styles.Props, Styles.Vals.Color> StyleColor = null
        Dictionary<Styles.Props, Styles.Vals.fontNames> StylefontNames = null
    )
    {

ここでは、フォントは必要だが色は必要ない場合を除き、必要はありません。このように呼び出すことで不快になる必要があります

DynamicStyle_Generator(counterhere , null, DictionaryOfFonts);

それ以外は

DynamicStyle_Generator(counterhere , DictionartyColors, DictionaryOfFonts);

次に、これは値に関係なく同じように機能します(nullかどうか)

        return string.Concat(BaseStyle, DictionartyColors, DictionaryOfFontsm, Terminator);
4

2 に答える 2

1

これは、オーバーエンジニアリングのケースのように私には見えます。キーと値の両方の文字列を内部的に処理するプロパティをSystem.Web.UI.WebControls.WebControl公開するのには理由があります。Styleキーの定数のリストを提供したいのですが、これは問題ありません。値の定数のリストは提供しません。

于 2012-12-20T02:40:14.080 に答える
0

C# の列挙型は、固定された個別の値のセットを表すために使用されます

http://www.codeproject.com/Articles/20805/Enhancing-C-Enums

あなたのコメントに基づいて、これはあなたが探しているものだと思います: http://weblogs.asp.net/ralfw/archive/2006/01/07/434774.aspx

上記のリンクから:

public enum Colors
{
   red, blue, green
}

Set<Colors> sc = new Set<Colors>();
sc.Add(Colors.red);
sc.Add(Colors.green);

Set<Colors> sc2 = new Set<Colors>();
sc2.Add(Colors.blue);

sc.Add(sc2); // union

Console.WriteLine(sc); // prints: [red,blue,green]
于 2012-12-20T02:52:18.037 に答える