【问题标题】:How do I approach array properties when I need an array to have an interval in C#?当我需要一个数组在 C# 中有一个间隔时,如何处理数组属性?
【发布时间】:2019-09-09 21:17:58
【问题描述】:

我对 C# 非常陌生,并且仍在尝试围绕它的一些核心概念展开思考。第一次向 StackOverflow 发布问题。

所以这是我需要帮助的:

为:私有字符串数组创建一个属性; : 以便: "数组的每个元素都需要 >=0 和

我应该运行它,然后为每个元素设置 array=value 还是什么?

这就是我所做的:

private string array;
 public int[] Array
        {
            get { return array; } //-is this part good for the task?
            set
            {
                //what do I do here to make sure the elements are withing the 
                //given interval?

            }
        }

【问题讨论】:

  • C# 是强类型的。为什么你有一个带有数字的字符串数组? 0 到 10 之间的数字只能存储为字节。你能澄清一下你想要做什么吗?
  • 一个属性只能检查整个数组的分配,但如果有人将单个值分配给数组位置,它将不会被激活。文字不是说的更多吗?这个属性也可以是Indexer 吗?因为索引器将允许您检查分配给任何数组位置的有效性。
  • 请注意,即使您验证每个元素 当前 在 [0, 10] 范围内,它也不会阻止数组随后发生突变 - 除非您克隆它.
  • 是的,规范不清楚。整个数组是可分配的还是只读的并在内部创建?

标签: c# arrays properties setter getter


【解决方案1】:

你正在寻找这样的东西

private int[] _privateArray;
public int[] PublicArray
{
    get
    {
        return _privateArray;
    }
    set
    {
        foreach (int val in value)
        {
            if (val < 0 || val > 10) throw new ArgumentOutOfRangeException();
        }
        // if you get to here you can set value
        _privateArray = (int[])value.Clone();
    }
}

请注意私有财产和公共财产必须是同一类型

【讨论】:

  • 这并没有太大帮助,因为数组可以在之后发生变异。
【解决方案2】:

看看这是不是你需要的(Demo):

public class myClass
{
    private int[] _Array = new int[10];

    public int this[int index]
    {
        get { return _Array[index]; }
        set
        {
            if (value >= 0 && value <= 10)
                _Array[index] = value;
        }
    }
}

public class Program
{
    public static void Main(string[] args)
    {
        myClass m = new myClass();
        m[0] = 1;
        m[1] = 12;
        Console.WriteLine(m[0]); // outputs 1
        Console.WriteLine(m[1]); // outputs default value 0
    }
}

【讨论】:

  • 其他选项是剪切值 (Math.Max(0, Math.Min(10, value))) 或抛出异常。同样,规范非常不清楚。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-06
相关资源
最近更新 更多