【问题标题】:Setting flag variable in c# web application在 C# Web 应用程序中设置标志变量
【发布时间】:2015-01-08 03:46:40
【问题描述】:

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

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)
{
}

设置标志变量时是否需要使用管道符号?我在网上浏览这个,但我得到了我没想到的答案。一个标志布尔值真或假。如果标志为真,则应启用彩色字体。另外请帮助我解决我需要从数据库中获取数据的问题。是否可以查看特定值是否具有高、低或中风险并相应显示字体

谁能建议我如何使用枚举将上述代码嵌入到标志中。

【问题讨论】:

  • 请格式化您的代码

标签: c# asp.net .net c#-4.0


【解决方案1】:
  • 您可以定义带有或不带有 Description 属性的枚举,但我的代码将同时使用这两种属性:(如果您的枚举值包含多个单词并且您需要使用“VeryHigh”之类的空格来显示它们,则可以使用 description 属性作为值,但您将其显示为带有空格的“非常高”。)

    public enum AlertType
    {
        [Description("High")]
        High,
    
        [Description("Medium")]
        Medium,
    
        [Description("Low")]
        Low
    }
    

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

    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.");
        }
    }
  • 现在,关于您的问题:

设置标志变量时是否需要使用管道符号?

不,您不需要这样做,因为您不能从枚举中组合多个值,例如,您不能说警报同时设置为高和低。当您的枚举值可以组合时,[Flags] 很有用,请参阅this

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

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

编辑

看起来您还需要 AlertType 和 Color 之间的映射,因此您的代码可以是这样的:

// 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];
        }
    }
}

希望这会有所帮助。

【讨论】:

  • Alani 我需要定义各种前景色,如 system.drawings.colors;红色,黄色,绿色。我可以在这里实现吗
  • 你能提供一些关于这个的细节吗,你需要 AlertType 和 ForeColor 之间的映射吗?或者别的什么,如果你在映射之后,那么 的字典就足够了。 ?
  • 我需要设置一个标志变量。例如我有 12345 这是高风险然后应该启用红色字体。请在这方面帮助我
  • 是的,我需要一个映射,我已经尝试过使用字典,但我当时在屏幕上获得了所有颜色。你能不能给我一个关于如何实现的语法
  • 更新问题以包括您尝试创建映射以了解您的问题所在并帮助您解决问题。
猜你喜欢
  • 2020-11-25
  • 1970-01-01
  • 1970-01-01
  • 2016-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-03
  • 2013-06-07
相关资源
最近更新 更多