0

考虑下一个代码:

    public Color TotalColor { get; set; }
    public string TotalColorName
    {
        get => TotalColor.ToString();
        set => TotalColor = Color.FromHex(value);
    }

它运作良好。现在我正在尝试对两个数组实现相同的方法:

    public string[] AreaColorNames { set; } = new string[3];
    public Color[] AreaColors { get; } = new string[3];

我应该如何编写设置器AreaColorNames?它应该是这样的:

AreaColorNames
{
    set
    { 
      AreaColors[index] = Color.FromHex(value);
    }
}

但是我们在设置器中没有index参数。有一些解决方法吗?谢谢你。

编辑

在我的情况下,许多颜色可能不同,所以我不能使用“左中右”方法。

让我解释一下我想要做什么。我正在开发一个用于读取特定文件格式的内部库消费者将通过不同的应用程序使用它,例如桌面和移动设备。所以我不想读取颜色值本身,因为在一个系统类型Color中描述System.Drawing,在其他 - 在Xamarin.Forms等中。我想我可以ColorName在接口中有一个属性,它将用作函数参数和适当的设置器每个实施。因为库专门用于我们自己的应用程序,所以我不会为错误使用而烦恼 - 它会受到内部安排的限制。

4

1 回答 1

3

有很多方法可以解决这个问题。使用带有indexers的自定义集合类型,您可能会非常喜欢。

但我建议根据您的实际需要找到最简单的方法。例如,想一想 AreaColorNames 是如何使用的:将特定索引设置为特定字符串真的有意义吗?这听起来像是在邀请人们犯错误。如果他们提供高于 2 的指数怎么办?如果他们提供的字符串不代表十六进制值怎么办?

如果您知道您只有三个“区域”,那是您模型的重要组成部分,您可以为其命名吗?例如:

public class AreaColors
{
  public Color LeftColor {get;set;}
  public Color MiddleColor {get;set;}
  public Color RightColor {get;set;}
  public IReadOnlyCollection<string> TotalColors => new[]{LeftColor, MiddleColor, RightColor}
}

我认为Color应该在将它设置在这样的对象上之前从十六进制值中得出一个:消费代码的编写者应该被迫考虑如果给定的字符串不是他们应该做什么有效的颜色。

于 2019-08-01T15:29:47.017 回答