C# property.GetValue忽略CultureInfo

C# property.GetValue忽略CultureInfo,c#,reflection,invariantculture,C#,Reflection,Invariantculture,似乎出于某种原因property.GetValue忽略了CultureInfo。以下是我试图实现的目标: public static IEnumerable<string> GetViewModelProperties(this IDocumentViewModel vm) { foreach (var property in vm.GetType().GetProperties().Where(p => (p.PropertyType.IsPrimitive ||

似乎出于某种原因property.GetValue忽略了CultureInfo。以下是我试图实现的目标:

public static IEnumerable<string> GetViewModelProperties(this IDocumentViewModel vm) {
     foreach (var property in vm.GetType().GetProperties().Where(p => (p.PropertyType.IsPrimitive ||
                                                                 p.PropertyType.GetInterfaces().Any(t => t.IsGenericType && t.GetGenericTypeDefinition() == typeof(IEnumerable<>))) &&
                                                                  p.GetIndexParameters().Count() == 0))
     {
        yield return property.Name + ":" + property.GetValue(vm, System.Reflection.BindingFlags.GetProperty, null, null, System.Globalization.CultureInfo.InvariantCulture);
     }
}
在生成的文件中,对于值为50.33的double类型的属性频率

Frequency:50,33
这是CurrentCulture(Polish使用coma作为分隔符),但不是

Frequency:50.33

如我所料。有什么问题吗?

PropertyInfo的GetValue函数返回的是一个对象,而不是一个字符串,下面是代码中的错误概念。该对象被转换为字符串,因为+运算符的第一个参数是字符串(property.Name),但CultureInfo未应用于该字符串转换

解决方案是显式使用Convert.ToString(object,IFormatProvider)函数,即

yield return property.Name + ":" + Convert.ToString(property.GetValue(vm, System.Reflection.BindingFlags.GetProperty, null, null, System.Globalization.CultureInfo.InvariantCulture), System.Globalization.CultureInfo.InvariantCulture);
yield return property.Name + ":" + Convert.ToString(property.GetValue(vm, System.Reflection.BindingFlags.GetProperty, null, null, System.Globalization.CultureInfo.InvariantCulture), System.Globalization.CultureInfo.InvariantCulture);