C# 中的泛型扩展方法
Generic Extension method in C#
我有不同的自定义列表 class。并且需要检查 String 类型的属性并验证 属性 的值。如果有一些错误的值,则用一些预定义的值更改该值。
为此,我想创建一个通用方法
public IEnumerable 验证(此 IEnumerable ListofData)
但现在我无法遍历属性并检查操作后的值和 return 是否相同。
请找到示例代码。
谢谢。
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.
}
}
}
不确定您将如何为不同的字符串属性设置不同的检查函数(或者您只是对所有字符串属性使用相同的逻辑),但这里是如何读取所有字符串属性并将它们设置为如果满足某些条件,则执行其他操作。
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.
}
我有不同的自定义列表 class。并且需要检查 String 类型的属性并验证 属性 的值。如果有一些错误的值,则用一些预定义的值更改该值。 为此,我想创建一个通用方法 public IEnumerable 验证(此 IEnumerable ListofData)
但现在我无法遍历属性并检查操作后的值和 return 是否相同。 请找到示例代码。
谢谢。
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.
}
}
}
不确定您将如何为不同的字符串属性设置不同的检查函数(或者您只是对所有字符串属性使用相同的逻辑),但这里是如何读取所有字符串属性并将它们设置为如果满足某些条件,则执行其他操作。
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.
}