是否可以为 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();
我是编码新手,目前还在上大学。抱歉,如果之前有人问过这个问题,但我在任何地方都看不到它。
我想知道是否可以为数组 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();