繁体   English   中英

如何使用 C# 中的属性创建一个简单的对象,例如使用 javascript

[英]How to create a simple Object with properties in C# like with javascript

我正在使用 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.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; }
}

我建议使用上一个版本。

有时谷歌是你最好的朋友:

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数据封装到一个Colour类中。

如果你真的需要将它称为myObject.Colors.Blue ,那么很难。 你已经把自己描绘成了一个你需要创建一个类的角落(或者至少你应该,我确定会有很多不可取的方法建议替代方案)并且你不必要地编译数据。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM