在.NET中是否有一个用于更改数组中所有对象的值的一行程序?

在.NET中是否有一个用于更改数组中所有对象的值的一行程序?,.net,.net,是否有一条直线可以用来更改数组中所有对象的值 例如,我有一个[empty]控件数组: Dim myArr(9) As Control 控件是对象引用类型,因此在实例化它之前,无法使用数组中的每个元素: myArr(0) = New Control() 我知道我需要多少项,并且我知道我需要实例化每个对象,所以有没有一种方法可以使用快速的一行程序实例化数组中的所有项?现在我正在做这件事,这没关系,但如果有一个班轮就好了 For i As Int32 = 0 To myArr.Length - 1

是否有一条直线可以用来更改数组中所有对象的值

例如,我有一个[empty]控件数组:

Dim myArr(9) As Control
控件是对象引用类型,因此在实例化它之前,无法使用数组中的每个元素:

myArr(0) = New Control()
我知道我需要多少项,并且我知道我需要实例化每个对象,所以有没有一种方法可以使用快速的一行程序实例化数组中的所有项?现在我正在做这件事,这没关系,但如果有一个班轮就好了

For i As Int32 = 0 To myArr.Length - 1
  myArr(i) = New Control()
Next
同样,如果我有一个整数数组,我如何更改一个线性数组中的所有值?比如说,我想把每个值乘以2


我已经迷上了
.map在Ruby中运行,我想在.NET中做一些同样优雅的事情。

您可以使用LINQ-我见过这样的代码:

var array = Enumerable.Range(0, size).Select(_ => new Control()).ToArray();
我不确定是否会立即使用等效的VB代码,但我确信如果需要,其他人可以提供该代码-并且您的代码只指定了“.NET”:

但就我个人而言,为了清晰起见,我会明确地这样做(而且效率也更高)

当然,您可以创建自己的方法来执行此操作:

public static T[] PopulateArray<T>(Func<T> initializer, int size)
{
    T[] ret = new T[size];
    for (int i = 0; i < size; i++)
    {
         ret[i] = initializer();
    }
}

您可以使用LINQ-我见过这样的代码:

var array = Enumerable.Range(0, size).Select(_ => new Control()).ToArray();
我不确定是否会立即使用等效的VB代码,但我确信如果需要,其他人可以提供该代码-并且您的代码只指定了“.NET”:

但就我个人而言,为了清晰起见,我会明确地这样做(而且效率也更高)

当然,您可以创建自己的方法来执行此操作:

public static T[] PopulateArray<T>(Func<T> initializer, int size)
{
    T[] ret = new T[size];
    for (int i = 0; i < size; i++)
    {
         ret[i] = initializer();
    }
}
我使用Update()扩展方法来更新通过LINQ查询获得的集合

public static class LinqExtensions
{
    public delegate void Func<Argument>(Argument item);
    public static bool Update<SourceType>(this IEnumerable<SourceType> source, Func<SourceType> updater)
    {
        if (null == source)
            throw new ArgumentException("Update extension method was given null source.");
        if (null == updater)
            throw new ArgumentException("Update extension method was given null updater.");

        foreach (SourceType item in source)
            updater(item);

        return true;
    }
}
公共静态类LinqExtensions
{
公共委托无效函数(参数项);
公共静态bool更新(此IEnumerable源,Func更新程序)
{
if(null==源)
抛出新ArgumentException(“更新扩展方法的源代码为null”);
if(null==更新程序)
抛出新的ArgumentException(“更新扩展方法的更新程序为null”);
foreach(源中的SourceType项)
更新程序(项目);
返回true;
}
}
从那里我只写了一个函数,我可以应用于所有被更新的项目。这是一个简单的“映射”式例程。例如,我将其用于WinForms控件。

我使用Update()扩展方法来更新通过LINQ查询获得的集合

public static class LinqExtensions
{
    public delegate void Func<Argument>(Argument item);
    public static bool Update<SourceType>(this IEnumerable<SourceType> source, Func<SourceType> updater)
    {
        if (null == source)
            throw new ArgumentException("Update extension method was given null source.");
        if (null == updater)
            throw new ArgumentException("Update extension method was given null updater.");

        foreach (SourceType item in source)
            updater(item);

        return true;
    }
}
公共静态类LinqExtensions
{
公共委托无效函数(参数项);
公共静态bool更新(此IEnumerable源,Func更新程序)
{
if(null==源)
抛出新ArgumentException(“更新扩展方法的源代码为null”);
if(null==更新程序)
抛出新的ArgumentException(“更新扩展方法的更新程序为null”);
foreach(源中的SourceType项)
更新程序(项目);
返回true;
}
}

从那里我只写了一个函数,我可以应用于所有被更新的项目。这是一个简单的“映射”式例程。例如,我在WinForms控件中使用了它。

VB.NET没有太大区别:
Dim array=Enumerable.Range(0,size)。Select(Function(I)New Control)。ToArray()
VB.NET没有太大区别:
Dim array=Enumerable.Range(0,size)。Select(Function(I)New Control)。ToArray()