在c#web应用程序中设置标志变量

在c#web应用程序中设置标志变量,c#,asp.net,.net,c#-4.0,C#,Asp.net,.net,C# 4.0,我已经用文本框中的属性编写了一个代码,我正在设置一些类似这样的值 public string Color { get{}; set { SetColor(value); } } private void SetColor(string level) { switch(level.ToLower()) { case "high": textbox1.BackColor = System.Drawing.Color.Red;

我已经用文本框中的属性编写了一个代码,我正在设置一些类似这样的值

public string Color
{ 
get{}; 
set
  { 
     SetColor(value);
  } 
} 

private void SetColor(string level)
{
    switch(level.ToLower())
    {
     case "high":
     textbox1.BackColor = System.Drawing.Color.Red;
     break;

     case "medium":
     textbox1.BackColor = System.Drawing.Color.Green;
     break;

     case "low":
     textbox1.BackColor = System.Drawing.Color.Yellow;
     break;
   }
}
但我的主要目的是,我需要设置标志,如果标志是高的,它应该显示红色字体,同样,如果标志是中等的,它应该显示黄色字体的标签

public static class EnumExtensions
{
    private static void CheckIsEnum<T>(bool withFlags)
    {
            CheckIsEnum(T) (True);
    }
}

 public static bool IsFlagSet<T>(this T value, T flag)
{
}
公共静态类枚举扩展
{
私有静态void CheckIsEnum(bool with flags)
{
CheckIsEnum(T)(真);
}
}
公共静态bool IsFlagSet(此T值,T标志)
{
}
设置标志变量时是否需要使用管道符号?我在网上冲浪,但我得到了意想不到的答案。一个标志布尔值为true或false。如果标志为true,则应根据启用颜色字体。另外,请帮助我,我需要从数据库获取数据。是否可以查看特定值是否具有高风险、低风险或中等风险,并相应显示字体

有谁能告诉我如何使用enum将上述代码嵌入到标志中。

  • 您可以定义包含或不包含Description属性的枚举,但我的代码可以同时使用这两种属性:(如果枚举值由多个单词组成,并且需要使用“VeryHigh”等空格作为值来显示它们,但使用空格将其显示为“VeryHigh”,则可以使用Description属性。)

现在,使用一些帮助器方法,比如这个帮助器类中的方法,您可以使用一个字符串值来获取枚举值,该字符串值可以表示值/描述

    public static class EnumUtils
    {
        public static string StringValueOf(Enum value)
        {
            var fi = value.GetType().GetField(value.ToString());
            var attributes = (DescriptionAttribute[])fi.GetCustomAttributes(typeof(DescriptionAttribute), false);
            if (attributes.Length > 0)
            {
                return attributes[0].Description;
            }
            return value.ToString();
        }


        public static T EnumValueOf<T>(string enumStr)
        {
            string[] names = Enum.GetNames(typeof(T));
            foreach (var name in names)
            {
                var enumVal = (Enum) Enum.Parse(typeof (T), name);
                if (string.Compare(StringValueOf(enumVal), enumStr, StringComparison.OrdinalIgnoreCase) == 0)
                {
                    return (T)Enum.Parse(typeof(T), name);
                }
            }

            throw new ArgumentException("The string is not a description or value of the specified enum.");
        }
    }
公共静态类枚举
{
公共静态字符串StringValueOf(枚举值)
{
var fi=value.GetType().GetField(value.ToString());
var attributes=(DescriptionAttribute[])fi.GetCustomAttributes(typeof(DescriptionAttribute),false);
如果(attributes.Length>0)
{
返回属性[0]。说明;
}
返回值.ToString();
}
公共静态EnumValueOf(字符串enumStr)
{
string[]names=Enum.GetNames(typeof(T));
foreach(名称中的变量名称)
{
var enumVal=(Enum)Enum.Parse(typeof(T),name);
if(string.Compare(StringValueOf(enumVal)、enumStr、StringComparison.OrdinalIgnoreCase)==0)
{
返回(T)Enum.Parse(typeof(T),name);
}
}
抛出新ArgumentException(“字符串不是指定枚举的描述或值”);
}
}
  • 现在,关于你的问题:
设置标志变量时是否需要使用管道符号

不需要,因为您不能组合枚举中的多个值,所以例如,您不能说警报同时设置为高和低。[Flags]在可以组合枚举值时非常有用,请参见

另外,请帮助我,我需要从数据库获取数据。是否可能,查看特定值是否具有高、低或中等风险,并相应显示字体

在这种情况下,可以使用helper方法将枚举字符串转换为枚举值

编辑

看起来您还需要AlertType和颜色之间的映射,因此您的代码可以如下所示:

// your mappings go here.
private Dictionary<AlertType, Color> _alertColorMappings = new Dictionary<AlertType, Color>()
{
    {AlertType.High, Color.Red},
    {AlertType.Medium, Color.Green},
    {AlertType.Low, Color.Yellow},
};

// Alert property which can be set through a mapping with a combobox
private AlertType _alert;
public AlertType Alert
{
    get
    {
        return _alert;
    }
    set
    {
        if (_alert != value)
        {
            _alert = value;
            textbox1.BackColor = _alertColorMappings[value];
        }
    }
}
//您的映射位于此处。
私有字典_alertColorMappings=新字典()
{
{AlertType.High,Color.Red},
{AlertType.Medium,Color.Green},
{AlertType.Low,Color.Yellow},
};
//可通过组合框映射设置的警报属性
私有警报类型_警报;
公共警报类型警报
{
收到
{
返回警报;
}
设置
{
如果(_alert!=值)
{
_警报=值;
textbox1.BackColor=_alertColorMappings[value];
}
}
}

希望这有帮助。

请格式化您的代码Alani我需要定义各种前景色,如system.drawings.Color;对于红色、黄色、绿色。我能在这里实现吗?你能给出一些细节吗?你需要AlertType和前景色之间的映射吗?或者别的什么,如果你在映射之后,那么一本字典就足够了?我需要设置一个标志变量。例如,我有12345,这是高风险的,那么红色字体应该启用。请在这方面帮助我是的,我需要一个映射,我用字典试过,但我在屏幕上得到了所有的颜色。你能给我一个关于如何实现的语法吗?更新问题,包括你尝试创建映射的内容,以了解问题所在并帮助你解决问题。
// your mappings go here.
private Dictionary<AlertType, Color> _alertColorMappings = new Dictionary<AlertType, Color>()
{
    {AlertType.High, Color.Red},
    {AlertType.Medium, Color.Green},
    {AlertType.Low, Color.Yellow},
};

// Alert property which can be set through a mapping with a combobox
private AlertType _alert;
public AlertType Alert
{
    get
    {
        return _alert;
    }
    set
    {
        if (_alert != value)
        {
            _alert = value;
            textbox1.BackColor = _alertColorMappings[value];
        }
    }
}