如何根据字符串的值设置实例的属性?

时间:2014-05-31 04:51:34

标签: c#

如果之前已经回答道歉,但我一直在阅读和搜索,但我无法找到答案。

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

另外,我有一个类,框,我已经创建了一个实例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]);

这样的东西

在这种情况下,我实际上可以用特定颜色在屏幕上绘图。

3 个答案:

答案 0 :(得分: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]);
      }
   }

答案 1 :(得分:0)

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

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

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

答案 2 :(得分:0)

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

换句话说,要一般地解决问题,您需要解决方案中特定于类型的元素。否则,例如,你将如何转换字符串&#34;三&#34;到int 3