PropertyInfo.GetValue(obj,null)正在截断字符串

本文关键字:字符串 null GetValue obj PropertyInfo | 更新日期: 2023-09-27 18:30:11

此通用辅助函数遍历对象列表,访问它们的公共属性,并为每个对象输出一个逗号分隔的字符串。

    /// <summary>
    /// Format the properties as a list of comma delimited values, one object row per. 
    /// </summary>
    /// <typeparam name="T">Type of class contained in the List</typeparam>
    /// <param name="list">A list of objects</param>
    /// <returns>a list of strings in csv format</returns>
    public static List<string> ToCSV<T>(this IEnumerable<T> list)
        where T : class
    {
        var results = new List<string>();
        bool firstTime = true;
        foreach (var obj in list)
        {
            // header data
            if (firstTime)
            {
                firstTime = false;
                string line = String.Empty;
                foreach (PropertyInfo propertyInfo in obj.GetType().GetProperties())
                {
                    if (propertyInfo.CanRead)
                    {
                        line += propertyInfo.Name + ',';
                    }
                }
                results.Add(line);
            }
            else
            {
                string line = String.Empty;
                foreach (PropertyInfo propertyInfo in obj.GetType().GetProperties())
                {
                    if (propertyInfo.CanRead)
                    {
                        object value = propertyInfo.GetValue(obj, null);
                        if (value.GetType() == typeof(string))
                        {
                            line += "'"" + value.ToString() + "'"" + ",";
                        }
                        else
                        {
                            line += value.ToString() + ",";
                        }
                    }
                }
                results.Add(line);
            }
        }
        return results;
    }

该方法迭代的一个类具有字符串属性,该属性被截断:

string BusinessItem { get; set; } // "0000", a legitimate business value

问题在于:

object value = propertyInfo.GetValue(obj, null); // value == 0

如何将属性的值作为字符串而不是int获取?

PropertyInfo.GetValue(obj,null)正在截断字符串

考虑此检查:

if (value.GetType() == typeof(string) && (value as string).Contains(','))

这意味着如果字符串值包含逗号,则仅将其写在引号内。

"0000"的字符串值将作为0000,写入该行。如果读取文件的代码检查一个值是否都是数字,以确定它是否是数字,那么它将被解析为数字,而不是字符串。在这种情况下,您应该将所有字符串都用引号括起来,而不仅仅是包含逗号的字符串。