使用自定义类型替换字符串参数

时间:2012-12-20 02:03:31

标签: c# asp.net types properties webforms

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

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

因为我知道(到现在为止),.net中大量使用了这些类型,我想知道,如何指定字典将接受作为专用类型传递的参数,而不是{{1输入。

这对我来说也是另一个关于类型的小课。

string

直到现在,我传递它(样式字典)字符串,用作参数,所以我可以让它完成工作,同时保持简单...因为我仍然对{{1}感到新鲜那时候......当我创建这个课程时,我甚至无法想到学习 //string //string html.StyleDict.Add(Stl.Prop.BgColor, Stl.Vals.Clr.Aquamarine); 是什么,或者如何使用它们。

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

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

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

types

例如。

这是我用来替换元素的背景的类 通过使用生成html标记的循环,所以我在循环计数器中传递循环中当前元素的其他样式属性

(有点偏离主题,但我必须提供一个用法示例来说明这个问题的含义)

......也就是风格词典的使用地点。

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

我可以使用另一种方式传递自己的类型(条件是使用相同的字典) 我唯一想到的就是使用设置为参数的默认值

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

2 个答案:

答案 0 :(得分:1)

这在我看来就像一个过度工程的案例。有一个原因是System.Web.UI.WebControls.WebControl公开了它的Style属性,它在内部使用键和值的字符串。您想要提供键的常量列表,没关系,值的常量列表不会。

答案 1 :(得分: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]