【问题标题】:how to set a property of an instance based on the value of a string?如何根据字符串的值设置实例的属性?
【发布时间】:2014-05-31 04:51:34
【问题描述】:

抱歉,如果之前已经回答过这个问题,但我一直在阅读和搜索,但找不到答案。

我有一个数组,比如说string[] myColors = {"red","white","blue"};,我选择了其中一种颜色,例如通过访问数组的第 n 个成员:myColors[2],这将是字符串“blue”。

另外,我有一个类 box,我创建了一个实例 myBox。该类有一个 Color 类型的属性 boxColor。并且该 Color 类型的可能值包括 Color.red = RGB(255,0,0)、Color.white = RGB(255,255,255) 和 Color.blue = RGB(0,0,255)(尽管为了论证, 这些枚举值的实际值和类型无关紧要,它们同样可以是float 或任何其他 C# 类型)。

如何将 myBox.boxColor 设置为我从 myColors[2] 获得的

即类似myBox.boxColor = (Color) (value of the string myColors[2]);

在这种情况下,这样我就可以在屏幕上实际绘制该特定颜色。

【问题讨论】:

  • 您是在问如何将字符串转换为 RGB 值?
  • @bstar55 没有。我正在尝试使用字符串的文本设置属性的值。它可能是超越数(e、pi 等)之类的属性,我希望将特定的超越数设置为字符串值,例如“圆周率”。
  • 我已经编辑了你的标题。请参阅“Should questions include “tags” in their titles?”,其中的共识是“不,他们不应该”。

标签: c#


【解决方案1】:

您必须有某种类型的映射。我在这里使用字典,但还有其他选择。我根据您的问题使用了Color,但您可以将Color 替换为您选择的任何其他类或结构。

   public struct Color
   {
      int r, g, b;
      public Color(int r, int g, int b)
      {
         this.r = r;
         this.g = g;
         this.b = b;
      }
   }

   public static class BetterColors
   {
      static Dictionary<string, Color> colorDictionary = new Dictionary<string, Color>();

      static BetterColors()
      {
         colorDictionary.Add("Red", new Color(255, 2, 4));
         colorDictionary.Add("Blue", new Color(0, 3, 251));
         colorDictionary.Add("Green", new Color(0, 200, 0));
      }

      static public Color GetColor(string colorName)
      {
         return colorDictionary[colorName];
      }
   }

   class Box
   {
      public Color boxColor { get; set; }
   }

   class Program
   {
      static void Main()
      {
         string[] myColors = { "Red", "Green", "Blue" };

         Box myBox = new Box();
         myBox.boxColor = BetterColors.GetColor(myColors[1]);
      }
   }

【讨论】:

    【解决方案2】:

    这个东西有一个内置的.NET函数,叫做Color.FromName

    Color blue = Color.FromName("Blue");
    

    http://msdn.microsoft.com/en-us/library/system.drawing.color.fromname.aspx

    【讨论】:

    • 不到一分钟就击败我。 :-)
    • 对于颜色的特殊情况听起来不错,但我正在寻找更一般的情况。我试图想一个不涉及颜色的例子。并希望我没有在我的问题中使用颜色。 :-)
    【解决方案3】:

    对于一般情况,您需要一种将字符串转换为正确类型的值的方法。如果没有类似于FromName 的函数,那么您可以使用带有静态字段的枚举或类,并使用反射将字符串转换为值。另一种方法是使用字典来映射值。

    换句话说,要解决一般问题,您需要解决方案中特定类型的元素。否则,例如,如何将字符串“three”转换为 int 3

    【讨论】:

    • 感谢@LVBen。这可能就是我努力寻找答案的原因。当然,映射必须存在于某处。当我试图构建一个非基于颜色的示例时,我开始明白这一点。欣赏解释和例子。
    猜你喜欢
    • 1970-01-01
    • 2020-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-16
    • 2021-07-02
    • 2022-09-23
    • 2017-04-29
    相关资源
    最近更新 更多