我目前有一些像这样的全局变量(全局部分并不真正相关):
public Brush backgroundColor;
public Brush textColor;
public double timeOffset;
public double dateOffset;
public string title;
public bool showTitle;
public bool showText;
我声明一个新的List<string>
来存储所述变量:
List<string> x = new List<string>();
x.Add(backgroundColor);
x.Add(textColor);
x.Add(timeOffset.ToString());
x.Add(dateOffset.ToString());
x.Add(title);
x.Add(showTitle.ToString());
x.Add(showText.ToString());
值得注意的是,我只是暂时将这些字符串存储到我的列表中。我将在稍后使用它们作为对象。如果我想将此列表中的strings
转换为bool
或double
等类型,我可以只使用Convert.ToDouble()
或Convert.ToBoolean()
,但是,我无法找到任何可以为Brush
对象执行此操作的内容。
我的Brush
对象的使用方式如下:Brushes.Black
(Reference MSDN)。我看过这个thread,但他们输入的方式是RGB或Hexadecimal,这不是我需要的。
Brushes.XXXX
是因为我正在将图像绘制到bitmap
个对象上。
答案 0 :(得分:3)
我建议创建一个类来保存所有这些信息:
public class MyDrawingInfo
{
public Brush BackgroundColor;
public Brush TextColor;
public double TimeOffset;
public double DateOffset;
public string Title;
public bool ShowTitle;
public bool ShowText;
}
现在你可以使用这个信息实例化一个类,传递它,而不必在任何地方执行一些疯狂的转换。
编辑:要使用此类,首先将其实例化:
MyDrawingInfo mdi = new MyDrawingInfo();
mdi.BackgroundColor = Brushes.Black;
//etc
然后,在调用另一个方法时,传递您需要的属性:
ManualBackgroundColor(mdi.BackgroundColor)
注意:我更新了属性的名称和方法名称。 C#中的标准是使您的属性和方法名称为Pascal Case
答案 1 :(得分:1)
如果您需要列表中的属性,我建议您使用List<object>
。由于.NET中的所有类都派生自object
类,因此转换将比将字符串转换为对象要多得多。由于您使用的是对象列表,因此不再需要类来保存属性。此外,您可以使用对象初始值设定项来创建列表,而不是每次都调用Add()
方法。列表的分配如下:
List<object> properties = new List<object>
{
backgroundColor,
textColor,
timeOffset,
dateOffset,
title,
showTitle,
showText
};
现在您可以将此列表传递给您的方法,如下所示:
YourListExpectingMethod(properties);
在该方法中,您必须提供一些逻辑来确定转换对象的类型!
更多阅读: