【问题标题】:Is it possible to create a constructor for Arrays c#? [closed]是否可以为数组 c# 创建构造函数? [关闭]
【发布时间】:2015-12-03 02:52:51
【问题描述】:

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

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

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

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

谢谢

【问题讨论】:

  • 你的问题有点含糊。 “所以每次我创建一个新数组时,我都可以自动执行代码?”
  • 请不要使用不相关的标签。这是一个 c# 问题 - 它不应该有 java 标签。
  • 你能举个例子来说明你正在尝试做什么,不管它有多错误?您是想使用像 int[]float[] 这样的数组,还是像 MyObject[] 这样定义的新对象?
  • 也许this topic 会回答你的问题...
  • 好吧,当然,std::array 有一个构造函数。再也没有人能修复 C 数组了。

标签: c# arrays instances


【解决方案1】:

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

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

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()),以便调用者可以更懒惰地新建对象。

您还应该避免尝试对所有数组进行此操作,因为我可以保证当您或其他人无法弄清楚原因时,这会给您或其他人带来问题@987654325 @ 正在做额外的事情。您应该在此处正确使用封装(即创建包装器/扩展/装饰器类)。

此外,现有的 Collections .NET 类之一完全有可能满足您的需求...查看这些。

【讨论】:

  • 来自您的链接:如果合适,请从实例构造函数中抛出异常。
  • 啊,确实如此。我混淆了一些东西,将编辑。
  • 为丹的回复干杯这有帮助:)
【解决方案2】:

我不确定我是否正确理解了您的问题,但如果您希望能够在创建数组时执行代码,您可以使用 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();

【讨论】:

    猜你喜欢
    • 2021-04-25
    • 2020-03-08
    • 1970-01-01
    • 2021-11-15
    • 2012-02-24
    • 1970-01-01
    • 1970-01-01
    • 2013-08-21
    • 1970-01-01
    相关资源
    最近更新 更多