C# 调整数组大小以丢失空值

C# 调整数组大小以丢失空值,c#,arrays,dynamic-arrays,C#,Arrays,Dynamic Arrays,我做了一个循环,从当前年龄到x年(比如80岁),每个月循环一次 我有一个数组yearCalculation years,每个yearCalculation包含一个数组monthCalculation。(以防有人想对列表发表评论,我目前正在使用数组,想看看是否有一个简单的解决方案。) 如下所示: yearCalculations[] years = years.InstantiateArray(//Number of years, [80 minus age]//); monthCalculati

我做了一个循环,从当前年龄到x年(比如80岁),每个月循环一次

我有一个数组yearCalculation years,每个yearCalculation包含一个数组monthCalculation。(以防有人想对列表发表评论,我目前正在使用数组,想看看是否有一个简单的解决方案。)

如下所示:

yearCalculations[] years = years.InstantiateArray(//Number of years, [80 minus age]//);
monthCalculations[] months = months.InstantiateArray(//Number of months in a year, [this should be 12]//);
在实例化之后,我循环遍历所有时段,并用各种计算填充它们。(但是,在达到年龄x后,所有计算结果都将为0):

for(int i=0;i
正如你在X(80岁)时所理解的,计算将完成,但最后一年的计算将包含一些结果,而不进行计算。假设这是从第7个月开始的。调整数组大小的最简单方法是什么,删除所有月份而不进行计算(索引6等等)


为了完整起见,这里是实例化array函数

public static T[] InstantiateArray<T>(this T[] t, Int64 periods) where T : new() 
{
    t = new T[periods];
    for (int i = 0; i < t.Length; i++){
        t[i] = new T();
    }
    return t;
}
publicstatict[]实例化array(此T[]T,Int64句点),其中T:new()
{
t=新的t[周期];
对于(int i=0;i
该方法应使用新的总长度完成此操作。您知道新的总长度将是旧的总长度-(12个月作为整年的整数)

该方法应使用新的总长度来完成此操作。您知道新的总长度是旧的总长度-(12个月作为整年的整数)

要从数组中删除空白值,可以使用LINQ

var arr = years.Where(x => !string.IsNullOrEmpty(x)).ToArray();//or what ever you need

要从数组中删除空白值,可以使用LINQ

var arr = years.Where(x => !string.IsNullOrEmpty(x)).ToArray();//or what ever you need

无法调整数组的大小。

创建阵列实例时,将确定维度的数量和每个维度的长度。这些值在实例的生存期内无法更改

像Array.Resize这样的方法实际上是分配一个新的数组并复制元素。理解这一点很重要。您不是在调整数组的大小,而是在重新分配它


只要你使用数组,最终的答案将归结为“分配一个新数组,然后复制你想要保留的内容”。

你不能调整数组的大小。

创建阵列实例时,将确定维度的数量和每个维度的长度。这些值在实例的生存期内无法更改

像Array.Resize这样的方法实际上是分配一个新的数组并复制元素。理解这一点很重要。您不是在调整数组的大小,而是在重新分配它


只要你使用数组,最终的答案将归结为“分配一个新数组,然后复制你想要保留的内容”。

说真的,你为什么不为此使用
List
?没有太多理由使用数组,尤其是当你需要调整数组的大小时。@JonSkeet扩展方法有什么可怕的地方?它确实能达到预期的目的。@Sliver2009:它根本不使用现有值-您可能只是为了类型推断的目的使用它。。。我个人并不认为这是扩展方法的一个很好的用途。(我很惊讶它甚至可以在您使用它的代码中工作——您声明了一个变量并在它自己的初始值设定项中使用它,它不应该编译。)我使用它进行类型推断。在我看来,这比为10个不同的类编写相同的代码要好。所以请原谅我的法语;但是我不介意你觉得它是否好看,只是出于个人的想法。我没有建议你多次编写相同的代码——我只是不介意类型推断。或者至少你应该编辑这个问题,以展示你将如何以编译的方式使用它。我还将使问题中的类型名称遵循.NET习惯用法。当然,你可以忽略我的意见。说真的,你为什么不使用
List
?没有太多理由使用数组,尤其是当你需要调整数组的大小时。@JonSkeet扩展方法有什么可怕的地方?它确实能达到预期的目的。@Sliver2009:它根本不使用现有值-您可能只是为了类型推断的目的使用它。。。我个人并不认为这是扩展方法的一个很好的用途。(我很惊讶它甚至可以在您使用它的代码中工作——您声明了一个变量并在它自己的初始值设定项中使用它,它不应该编译。)我使用它进行类型推断。在我看来,这比为10个不同的类编写相同的代码要好。所以请原谅我的法语;但是我不介意你觉得它是否好看,只是出于个人的想法。我没有建议你多次编写相同的代码——我只是不介意类型推断。或者至少你应该编辑这个问题,以展示你将如何以编译的方式使用它。我还将使问题中的类型名称遵循.NET习惯用法。当然,你可以忽略我的意见。很好,我一直在使用LINQ。我只是不知道我可以在阵列上使用它来。(现在你提到了,我觉得自己真的很蠢!)仅供参考,它适用于任何实现
IEnumerable
的东西非常好,我一直在使用LINQ。我只是不知道我可以在阵列上使用它来。(现在你提到了它,我觉得自己真的很蠢!)仅供参考,它适用于任何实现
IEnumerable
的东西。我知道我不能“逐字”调整数组的大小。但这是一个比喻,我完全知道它创造了