我正在使用C#(Windows-Phone-7)中的應用程序,並試圖做一些簡單的事情讓我難住。循環所有顏色?
我想循環遍歷顏色中的每種顏色,並將顏色名稱寫入文件(以及其他內容)。
我的代碼最簡單的一點,我知道就不行,但我寫的上手:
foreach (Color myColor in Colors)
{
}
當然,這給了我下面的語法錯誤:
「系統.Windows.Media.Colors'是一個'類型',但是像'變量'一樣使用。
有沒有辦法做到這一點?看起來很簡單!
我正在使用C#(Windows-Phone-7)中的應用程序,並試圖做一些簡單的事情讓我難住。循環所有顏色?
我想循環遍歷顏色中的每種顏色,並將顏色名稱寫入文件(以及其他內容)。
我的代碼最簡單的一點,我知道就不行,但我寫的上手:
foreach (Color myColor in Colors)
{
}
當然,這給了我下面的語法錯誤:
「系統.Windows.Media.Colors'是一個'類型',但是像'變量'一樣使用。
有沒有辦法做到這一點?看起來很簡單!
您可以使用此輔助方法來獲取每種顏色的名稱/值對的字典。
public static Dictionary<string,object> GetStaticPropertyBag(Type t)
{
const BindingFlags flags = BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic;
var map = new Dictionary<string, object>();
foreach (var prop in t.GetProperties(flags))
{
map[prop.Name] = prop.GetValue(null, null);
}
return map;
}
用途是:
var colors = GetStaticPropertyBag(typeof(Colors));
foreach(KeyValuePair<string, object> colorPair in colors)
{
Console.WriteLine(colorPair.Key);
Color color = (Color) colorPair.Value;
}
信貸的helper方法去 How can I get the name of a C# static class property using reflection?
您可以使用Reflection把所有的顏色中的屬性類型:
var colorProperties = Colors.GetType().GetProperties(BindingFlags.Static | BindingFlags.Public);
var colors = colorProperties.Select(prop => (Color)prop.GetValue(null, null));
foreach(Color myColor in colors)
{
// ....
也許你應該在你的GetProperties的末尾添加一個Where子句(以防萬一),例如:`.GetProperties(...)。Where(p => p.PropertyType == typeof(Color))`或者類似的東西? – Alxandr 2011-01-29 02:13:48
@Alxandr:這是安全的 - 不需要額外的支票(在這種情況下)。 Colors的所有公共屬性都已經是Color類型。請參閱:http://msdn.microsoft.com/en-us/library/system.windows.media.colors(VS.95).aspx – 2011-01-29 02:15:57
那麼你可以通過usi這個代碼。
List<string> colors = new List<string>();
foreach (string colorName in Enum.GetNames(typeof(KnownColor)))
{
//cast the colorName into a KnownColor
KnownColor knownColor = (KnownColor)Enum.Parse(typeof(KnownColor), colorName);
//check if the knownColor variable is a System color
if (knownColor > KnownColor.Transparent)
{
//add it to our list
colors.Add(colorName);
}
}
那段代碼真棒,並且工作完美!好的表演,完美的解決方案 – pearcewg 2011-01-29 02:49:46