是否可以为 Arrays c# 创建构造函数?

Is it possible to create a constructor for Arrays c#?

我是编码新手,目前还在上大学。抱歉,如果之前有人问过这个问题,但我在任何地方都看不到它。

我想知道是否可以为数组 Class 创建一个构造函数,所以每次我创建一个新数组时,我都可以执行代码,例如计算我在应用程序中拥有的数组数量我做的每个实例?我知道数组 class 是抽象的,所以你不能创建它的实例。

int[] 数组只是抽象数组 class 中的方法吗?

任何关于为什么它是可能的或不可能的见解将不胜感激!

谢谢

如果您的自定义代码只是为了填充数组,C# 提供了几种内置方法来执行此操作(请参阅 All possible C# array initialization syntaxes)。

如果您希望每次创建特定类型对象的实例时都执行代码,您应该制作一个 class 来表示该对象(您也可以使用扩展方法,但这可能会随着时间的推移而变得混乱)。这个 class 可能只不过是一个数组的包装器:

public class MyArray<T>
{
    private T[] _array;

    public MyArray()
    {
        // execute your always must run code here!
    }

    public ArrVal
    {
       get { return _array; }
       set { _array = value; }
    }
}

...

MyArray<int> myArray = new MyArray<int>(); // your custom code gets executed when you new up the object here

但是,根据 best practices,您应该避免在构造函数中包含执行过多工作的代码(根据我的经验,拥有抛出异常的构造函数会导致一些难以调试的问题,尽管MSDN 说抛出异常比掩盖它更好)。如果此代码将执行大量工作,则最好创建一个单独的方法(可能称为 public void Initialize()),以便调用者可以更懒惰地新建对象。

您还应该避免尝试对所有阵列完成此操作,因为我可以保证这会给您或其他人带来问题,因为他们不能弄清楚为什么 int[] arr = new int[3] 正在做额外的事情。您应该在此处正确使用封装(即创建 wrapper/extension/decorator class)。

此外,现有的 .NET 集合 classes 之一完全有可能满足您的需求...研究这些。

我不确定我是否正确理解了你的问题,但如果你想在创建数组时能够执行代码,你可以使用 LINQ:

int[] myArray = new int[10]
    .Select((x, idx) => /*execute your code here*/).ToArray();

因此您可以创建一个长度为 10 的数组,然后您可以为每个元素执行代码以确定要填充的内容。

例如,您可以使用随机数填充数组:

Random random = new Random();
int[] myRandomArray = new int[10]
    .Select((x, idx) => random.Next()).ToArray();