Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何根据字符串的值设置实例的属性?_C# - Fatal编程技术网

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

C# 如何根据字符串的值设置实例的属性?,c#,C#,如果之前有人回答过,我表示歉意,但我一直在阅读和搜索,找不到答案 我有一个数组,比如说string[]myColors={“red”、“white”、“blue”}我选择了其中一种颜色,例如通过访问数组的第n个成员:myColors[2],它将是字符串“blue” 另外,我有一个类box,我已经为它创建了一个实例myBox。该类有一个属性boxColor,类型为Color。该颜色类型的可能值包括Color.red=RGB(255,0,0)、Color.white=RGB(255255255)和C

如果之前有人回答过,我表示歉意,但我一直在阅读和搜索,找不到答案

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

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

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

i、 例如
myBox.boxColor=(Color)(字符串myColors[2]的值)


在本例中,这样我就可以在屏幕上以特定的颜色进行绘制。

有一个内置的.NET函数用于此功能,名为
color.FromName

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

您必须有某种类型的映射。我在这里使用字典,但也有其他选择。基于您的问题,我使用了
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]);
      }
   }
公共结构颜色
{
int r,g,b;
公共颜色(整数r、整数g、整数b)
{
这个。r=r;
这个.g=g;
这个.b=b;
}
}
公共静态类BetterColor
{
静态字典colorDictionary=新字典();
静态最佳颜色()
{
添加(“红色”,新颜色(255,2,4));
添加(“蓝色”,新颜色(0,3251));
添加(“绿色”,新颜色(0,200,0));
}
静态公共颜色GetColor(字符串colorName)
{
返回colorDictionary[colorName];
}
}
类框
{
公共颜色boxColor{get;set;}
}
班级计划
{
静态void Main()
{
字符串[]myColors={“红色”、“绿色”、“蓝色”};
Box myBox=新的Box();
myBox.boxColor=BetterColors.GetColor(myColors[1]);
}
}

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


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

您是否询问如何将字符串转换为RGB值?@bstar55否。我正在尝试使用字符串的文本设置属性的值。它可能是一个类似于超越数(e,pi等)的属性,我想将特定的超越数设置为字符串值,例如“pi”。我已经编辑了你的标题。请看,“,共识是“不,他们不应该”。比我快了不到一分钟。:-)对于颜色的特殊情况听起来不错,但我要寻找更一般的情况。我在想一个不涉及颜色的例子。希望我的问题中没有使用颜色。:-)谢谢,也感谢@LVBen。这可能就是为什么我一直在努力寻找答案。当然,映射必须存在于某个地方。当我试图构建一个非基于颜色的示例时,我开始明白这一点。感谢您的解释和示例。