C#查找数组中存在的元素数

C#查找数组中存在的元素数,c#,.net,.net-core,C#,.net,.net Core,我想创建一个通用的静态类。该类应通过每个属性并检查是否为数组。若结果为真,那个么类应该检查类中存在多少元素,并返回那个数字 我到现在为止所做的: public static class Helper<T> where T : class { private static int _counter = 0; public static int Counter() { Type type = typeof(T); foreach (

我想创建一个通用的静态类。该类应通过每个属性并检查是否为数组。若结果为真,那个么类应该检查类中存在多少元素,并返回那个数字

我到现在为止所做的:

public static class Helper<T> where T : class
{
    private static int _counter = 0;
    public static int Counter()
    {
        Type type = typeof(T);
        foreach (var property in type.GetProperties())
        {
            if (property.PropertyType.IsArray)
            {

            }
        }

        return _counter;
    }
}
公共静态类助手,其中T:class
{
专用静态int_计数器=0;
公共静态int计数器()
{
类型=类型(T);
foreach(类型.GetProperties()中的var属性)
{
if(property.PropertyType.IsArray)
{
}
}
返回计数器;
}
}
我需要帮助如何获得数组中当前元素的数量

public static int Counter()
{
    Type type = typeof(T);
    foreach (var property in type.GetProperties())
    {
        Console.WriteLine(property.Name);
        if (property.PropertyType.IsArray)
        {
            var array = property.GetValue(null, null) as Array;
            Console.WriteLine(array.Length);
        }
    }

    return _counter;
}

示例:

如果还希望在实例化对象上使用它,而不是在类型上使用它,则可以执行s.th。这样(删除
助手的泛型类型
,并使
计数器
方法成为泛型):

公共静态类帮助器
{
//此方法将仅迭代公共静态属性
公共静态int Counter(),其中T:class=>Counter(typeof(T),null);
//此方法将迭代所有公共属性
公共静态int计数器(T objectToCount),其中T:class
{
if(objectToCount==null)
{
抛出新ArgumentNullException(nameof(objectToCount));
}
返回计数器(类型(T),对象计数);
}
公共静态int计数器(类型,对象实例)
{
int _计数器=0;
PropertyInfo[]属性=null;
if(实例==null)
{
properties=type.GetProperties(BindingFlags.Static | BindingFlags.Public);
}
其他的
{
properties=type.GetProperties();
}
foreach(属性中的var属性)
{
if(property.PropertyType.IsArray)
{
var array=property.GetValue(实例,null)作为数组;
变量长度=数组?长度;
//用你的柜台做s.th
}
}
返回计数器;
}
}
然后你可以像这样使用它:

Helper.Counter(x);
Helper.Counter<TestClass>();
Helper.Counter<TestClass>(x);

如果我答对了你的问题,你需要得到一个类的数组属性的数量。 在这种情况下,您可以选择两种方法。 扩展方法:

public static class Extensions
{
    public static int NumbeofArays<TClass>(this TClass entry) where TClass : class, new()
    {
        Type type = typeof(TClass);
        int arrays = 0;
        foreach (var propertyInfo in type.GetProperties())
        {
            if (propertyInfo.PropertyType.IsArray)
                arrays = arrays + 1;
        }

        return arrays;
    }
}
公共静态类扩展
{
公共静态int numberofaries(此TClass条目),其中TClass:class,new()
{
类型类型=类型(TClass);
int数组=0;
foreach(type.GetProperties()中的var propertyInfo)
{
if(propertyInfo.PropertyType.IsArray)
数组=数组+1;
}
返回阵列;
}
}
或助手类:

public static class ClassHelper<TClass> where TClass : class, new()
{
    static ClassHelper()
    {
        Type type = typeof(TClass);
        int arrays = 0;
        foreach (var propertyInfo in type.GetProperties())
        {
            if (propertyInfo.PropertyType.IsArray)
                arrays = arrays + 1;
        }

        NumberofArrays = arrays;
    }

    public static int NumberofArrays { get; }
}
公共静态类ClassHelper,其中TClass:class,new()
{
静态类助手()
{
类型类型=类型(TClass);
int数组=0;
foreach(type.GetProperties()中的var propertyInfo)
{
if(propertyInfo.PropertyType.IsArray)
数组=数组+1;
}
NumberofArrays=数组;
}
公共静态int numberOfArray{get;}
}

T应该是静态类类型还是实例类型?@ikkentim应该是类,那么应该在哪个实例上检查数组中有多少元素?编辑:或者你只是想计算数组类型的属性的数量?@ikkentim因为没有对象被传递到计数器方法,我猜它是静态的。如果是实例类型呢?我在控制器中使用它,它在传递数据时,在获取行var array=property.GetValue时,获取参数[FromBody](空,空)作为数组;正在获取异常非staic方法需要target@DanijelBoksan你只需要实例化还是泛型?目前只需要实例化。@DanijelBoksan如果泛型方法太多,我还添加了一个更简单的解决方案,只允许实例化如果类也有一些实例化属性,它将失败,你至少需要
BindingFlags.Public | BindingFlags.Static
作为
GetProperties