Don't use array indexes to arbitrarily mean something more than a position.
Use named properties for each of these colors, and even better, use System.Drawing.Color.
This would be a good style for maintanable, modern C#:
namespace FirstApp
{
public static class ColorSchemes
{
public struct ThemeColors
{
public Color MainBackground { get; internal set; }
public Color TextColor { get; internal set; }
public Color TextShadow { get; internal set; }
}
private static readonly ThemeColors[] Colors =
{
new ThemeColors
{
MainBackground = Color.FromArgb(0xD6, 0x00, 0x00),
TextColor = Color.FromArgb(0xDB, 0x3E, 0x25),
TextShadow = Color.FromArgb(0xFF, 0x59, 0x40)
}
};
public static ThemeColors GetThemeColors(int themeIndex)
{
if (themeIndex < 0 || themeIndex >= Colors.Length)
throw new ArgumentOutOfRangeException();
return Colors[themeIndex];
}
}
}
The colors can now be accessed with a simple, readable ColorSchemes.GetThemeColors(0).TextColor. They can also be loaded from other locations dynamically without breaking an API by using properties. Additional themes can be added simply.
For proper object oriented design, there should probably be a Theme class that returns a ThemeColors struct when requested for its colors instead of using a static ColorSchemes class.
That could be implemented something like this (keep in mind explicit constructors should probably be used for much of this):
namespace FirstApp
{
public class Theme
{
public struct ThemeColors
{
public Color MainBackground { get; internal set; }
public Color TextColor { get; internal set; }
public Color TextShadow { get; internal set; }
}
// Example other property
public string Name { get; set; }
public ThemeColors Colors { get; set; }
}
public static class DefaultThemes
{
public static Theme MainTheme =>
new Theme
{
Name = "Main Theme",
Colors = new ThemeColors
{
MainBackground = Color.FromArgb(0xD6, 0x00, 0x00),
TextColor = Color.FromArgb(0xDB, 0x3E, 0x25),
TextShadow = Color.FromArgb(0xFF, 0x59, 0x40)
}
};
}
}
Then, you'd have DefaultThemes.MainTheme.Colors.TextShadow.
usingandnamespaceparts could be omitted) and a clear problem statement.