0

如果您不需要此问题的背景知识,请跳至下面的问题。

正如您在第一个代码块中看到的那样,我使用常量作为传递给样式字典的参数。

因为我知道(到目前为止),类型在 中被广泛使用.net,我想知道如何指定字典将接受作为专用类型而不是string类型传递的参数。

这也将是我的另一个小课,关于 types 。

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

到目前为止,我一直在传递它(样式字典)字符串,用作参数,所以我可以让它完成工作,同时保持简单......因为我仍然对.net, 和那时......当我创建这个类时,我什至没有想到学习它们是什么types,或者如何使用它们。

所以......对于这种情况,实现和使用应该是一项非常简单的任务(对于你们中的一些人......实际上,如果不是全部(: )的话,你们中的大多数人都可以通过使用自定义类型而不是字符串来转换实现。

问题是:如何创建样式类?

...所以最终它将为该 C# 样式任务传递字符串,但字典将允许您将参数作为类型传递style,这是因为 html css 样式是通过后面的代码通过字符串值完成的。虽然我会在填充样式字典时使用我的自定义样式类。

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

那么这将完成它的工作,无论值以相同的方式(是否为空)

        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 回答