ASP.NET MVC/C#-在自定义必需的验证属性中将类型转换为数组

ASP.NET MVC/C#-在自定义必需的验证属性中将类型转换为数组,c#,validation,asp.net-mvc-2,custom-attributes,C#,Validation,Asp.net Mvc 2,Custom Attributes,我正在尝试创建一个自定义的必需验证属性,该属性将能够接受任何大小的1d数组,并验证至少一个元素不是null/空字符串。我在弄清楚如何将传入的泛型对象转换为数组时遇到了一些困难。以下是我目前掌握的情况: public class RequiredArrayAttribute : RequiredAttribute { public override bool IsValid(object value) { var valueType = value.GetType(

我正在尝试创建一个自定义的必需验证属性,该属性将能够接受任何大小的1d数组,并验证至少一个元素不是null/空字符串。我在弄清楚如何将传入的泛型对象转换为数组时遇到了一些困难。以下是我目前掌握的情况:

public class RequiredArrayAttribute : RequiredAttribute
{
    public override bool IsValid(object value)
    {
        var valueType = value.GetType();

        if (!valueType.IsArray)
        {
            return false;
        }

        bool hasValue = false;

        foreach (var item in value)
        {
            /* if (item != null/empty)
             * {
             *    hasValue = true;
             * }
            */
        }

        return hasValue;
    }
}
虽然我在这个实例中的特定用例将处理
string[]
,但我希望尽可能保持该属性的通用性,以便将来在其他项目中使用。关于如何进行有什么想法吗

编辑:

我基本上需要做一些事情,比如:

foreach (var item in (valueType[])value)
{
    // ...
}

但我不确定如何/是否可以动态地强制转换到这样的数组。

我相信您需要以下内容: 循环的一般处理:检查下面的答案

演员扮演T:

您可以创建表示T的单独类

例如: 公开课Foo{ 公共字符串Boo{get;set;} }


当你把它放入List=newlist()等:)

你用的是什么版本的C?你能使用Linq和泛型吗?例如,如果您有一个泛型集合,您可以执行类似.Where(x=>x!=null).Count()>0的操作-当然,这会处理null部分而不是空字符串部分:)我使用的是C#4,所以我有LINQ和泛型。我可以毫无问题地将模型数据表示为列表。然而,主要的问题仍然存在——我如何将对象值转换为列表?假设对象实现了IList而不是IEnumerable,这是否有帮助?如下所示:IList collection=(IList)myObject;请参阅我对Jen关于我的问题的评论。