反射用列表c#修剪列表中的所有字符串

我有一个修剪所有字符串的方法.

public static IEnumerable<T> Trim<T>(this IEnumerable<T> collection)
{
    foreach (var item in collection)
    {
        var stringProperties = item.GetType().GetProperties()
                  .Where(p => p.PropertyType == typeof(string));

        foreach (var stringProperty in stringProperties)
        {
            var currentValue = (string)stringProperty.GetValue(item, null);

            if (currentValue != null)
                stringProperty.SetValue(item, currentValue.Trim(), null);
        }
    }
    return collection;
}

但是,如果我的属性是一个列表,则需要在该列表中的所有字符串属性中应用修剪,有人可以帮助我吗?

解决方法:

public static IEnumerable<T> Trim<T>(this IEnumerable<T> collection)
    where T:class 
{
    foreach (var item in collection)
    {
        var properties = item.GetType().GetProperties();

        // Loop over properts
        foreach (var property in properties)
        {
            if (property.PropertyType == typeof (string))
            {
                var currentValue = (string)property.GetValue(item);
                if (currentValue != null)
                    property.SetValue(item, currentValue.Trim());
            }
            else if (typeof(IEnumerable<object>).IsAssignableFrom(property.PropertyType))
            {
                var currentValue = (IEnumerable<object>)property.GetValue(item);
                if (currentValue != null)
                    currentValue.Trim();
            }
        }
    }
    return collection;
}

编辑:包括产量

编辑2:再次删除产量.我知道这对于IEnumerable扩展是不好的做法.但是,替代方法是:

            else if (typeof(IEnumerable<object>).IsAssignableFrom(property.PropertyType))
            {
                var currentValue = (IEnumerable<object>)property.GetValue(item);
                if (currentValue != null)
                    currentValue.Trim().ToList(); // Hack to enumerate it!
            }
        }
    }
    yield return item;
}
上一篇:(网页)JS去掉字符串前后空格或去掉所有空格的用法(转)


下一篇:学习黑马JavaWeb项目:黑马旅游网笔记