web-dev-qa-db-ja.com

JavaScriptなどのC#のプロパティを使用して単純なオブジェクトを作成する方法

私は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シャープなものはありますか?ありがとうございました

13
sgarcia.dev

動的オブジェクトを作成できます( https://msdn.Microsoft.com/en-us/library/system.dynamic.expandoobject%28v=vs.110%29.aspxhttps://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; }
}

最後のバージョンを使用することをお勧めします。

15
musium

時々Googleはあなたの親友です:

https://msdn.Microsoft.com/en-us/library/bb397696.aspx

var Colors = new {
    Blue = Xamaring.Color.FromHex("FFFFFF"),
    Red = Xamarin.Color.FromHex("F0F0F0")
}
4
YoYoYonnY

文字列名から色を取得したいだけの場合は、単に辞書を使用しないでください。

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、それから厳しい。あなたはあなたがクラスを作成する必要があるコーナーに自分自身を描きました(または少なくともあなたはそうするべきです、私は選択肢が提案される多くの非推奨な方法を確信しています)そしてあなたは不必要にデータをコンパイルします。

1
Nathan Cooper