私はXamarinを使用していますが、次のようなものが必要です。
public Colors = new object() {
Blue = Xamaring.Color.FromHex("FFFFFF"),
Red = Xamarin.Color.FromHex("F0F0F0")
}
だから私は後でこのようなことをすることができます:
myObject.Colors.Blue // returns a Xamarin.Color object
しかし、もちろん、これはコンパイルされません。どうやら、私はこれのために完全に新しいクラスを作成する必要があります。私が本当にしたくない、私がすべきではないと思うものです。 JavaScriptでは、私はこのようなことを次のようにして行うことができます:
this.colors = { blue: Xamarin.Color.FromHex("..."), red: Xamarin... }
これをすばやく達成するのに役立つCシャープなものはありますか?ありがとうございました
動的オブジェクトを作成できます( https://msdn.Microsoft.com/en-us/library/system.dynamic.expandoobject%28v=vs.110%29.aspx 、 https://msdn.Microsoft.com/en-us/library/bb397696.aspx )。しかし、C#は強く型付けされた言語です…JavaScriptのような型なし言語ではありません。したがって、新しいクラスを作成することは、C#でこれを行う方法です。
動的オブジェクトを使用した例:
public class Program
{
static void Main(string[] args)
{
var colors = new { Yellow = ConsoleColor.Yellow, Red = ConsoleColor.Red };
Console.WriteLine(colors.Red);
}
}
またはExpandoObjectを使用:
public class Program
{
static void Main(string[] args)
{
dynamic colors = new ExpandoObject();
colors.Red = ConsoleColor.Red;
Console.WriteLine(colors.Red);
}
}
または、より多くのC#OOこれを行う方法…。クラスを作成します。
public class Program
{
static void Main(string[] args)
{
var colors = new List<Color>
{
new Color{ Color = ConsoleColor.Black, Name = "Black"},
new Color{ Color = ConsoleColor.Red, Name = "Red"},
};
Console.WriteLine(colors[0].Color);
}
}
public class Color
{
public ConsoleColor Color { get; set; }
public String Name { get; set; }
}
最後のバージョンを使用することをお勧めします。
時々Googleはあなたの親友です:
https://msdn.Microsoft.com/en-us/library/bb397696.aspx
var Colors = new {
Blue = Xamaring.Color.FromHex("FFFFFF"),
Red = Xamarin.Color.FromHex("F0F0F0")
}
文字列名から色を取得したいだけの場合は、単に辞書を使用しないでください。
public static Dictionary<string,Color> colours;
public static void Main(string[] args)
{
var dictionary = new Dictionary<string,Color>();
dictionary.Add("blue",Xamarin.Color.FromHex("FFFFFF"));
}
色は、プロパティとして意味のあるものではなく、コレクションに属しているものだと思います。 Colour
は概念であり、特定の色は実行時に変更される可能性がある単なるデータです。しかし、この区別がないと、他の場所から色の選択を注入するなどのことは不可能になります。
さらに洗練されたものを追加できます。色名とそのXamerinデータを1つのColour
クラスにカプセル化します。
本当にそれを呼び出す必要がある場合myObject.Colors.Blue
、それから厳しい。あなたはあなたがクラスを作成する必要があるコーナーに自分自身を描きました(または少なくともあなたはそうするべきです、私は選択肢が提案される多くの非推奨な方法を確信しています)そしてあなたは不必要にデータをコンパイルします。