2017-08-09 70 views
-2

我有不同的自定义类列表。并需要检查字符串类型的属性并验证属性的值。如果有一些错误的值,则用某个预定义的值更改该值。 为此,我想创造 公共IEnumerable的验证(这IEnumerable的ListofData)C#中的通用扩展方法#

的一般方法,但现在我无法穿越的性能和检查值和操纵后返回相同的。 向我发送一些链接,以便我可以了解它。

谢谢。

public static class ValidateExt 
{ 
    public static IEnumerable<T> ValidateStringData<T>(this IEnumerable<T> DataList) 
    { 
     PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(typeof(T)); 
     foreach(T Item in DataList) 
     { 
      // here want to manipulate the date of those properties which is of string type and assign it back. 
     } 
    } 
} 
+0

不粗鲁,但我不认为这是一个问题,听起来像我们的要求做你的研究.. –

+1

建议你发布一些你的代码,或者至少一个例子你想如何表现。 –

+0

对不起,请找到我试过的一些代码。 公共静态类ValidateExt { 公共静态的IEnumerable ValidateStringData (这IEnumerable的的DataList) { PropertyDescriptorCollection属性= TypeDescriptor.GetProperties(typeof运算(T)); foreach(T在DataList中的项) { //这里要处理那些字符串类型的属性的日期并将其赋值。 } } } –

回答

1

不知道你将如何为不同的字符串性质不同的校验功能(或者你只是使用相同的逻辑为所有字符串属性),但这里是例子,你怎么会看所有的字符串属性和设置他们如果满足某些条件则是别的东西。

public static IEnumerable<T> ValidateStringData<T>(this IEnumerable<T> dataList) 
{ 
    var properties = typeof(T).GetProperties().Where(p => p.PropertyType == typeof(string)).ToArray(); 
    foreach (var item in dataList) 
    { 
     foreach (var propertyInfo in properties) 
     { 
      var value = propertyInfo.GetValue(item, null) as string; 
      string newValue; 

      if (CheckString(value, out newValue)) 
      { 
       propertyInfo.SetValue(item, newValue, null); 
      } 
     } 

     yield return item; 
    } 
} 

private static bool CheckString(string value, out string newValue) 
{ 
    // do your validation logic here. 
}