Как реализовать универсальный объект. ToString (CultureInfo.Invariant) - PullRequest
0 голосов
/ 21 декабря 2018

Я копирую этот код формы вопроса StackOverlow здесь , но я получил отзыв, что он не работает на компьютерах с определенным форматом даты и времени.У вас есть идея, как это исправить?

Проблема в том, что метод форматирования является универсальным и object.ToString не перегружен с параметром CultureInfo.

private string UrlEncodeObject(object o)
{
    var properties = from p in o.GetType().GetProperties()
        where p.GetValue(o, null) != null
        select p.Name + "=" + System.Net.WebUtility.UrlEncode(p.GetValue(o, null).ToString());

    string queryString = String.Join("&", properties.ToArray());
    return queryString;
}

Я ожидаю, чтомогут быть похожие проблемы с определенным десятичным символом и т. д.

1 Ответ

0 голосов
/ 21 декабря 2018

Этот код уже делает много вещей, разве вы не хотите разложить этот метод на более мелкие?

Вы можете извлечь метод, чтобы получить строковое значение:

select p.Name + "=" + GetPropertyValue(o, p);

И реализуйте это так:

private string GetPropertyValue(PropertyInfo i, object o)
{
    var propertyValue = p.GetValue(o, null);

    string stringValue;

    if (propertyValue.GetType() == typeof(DateTime))
    {
        stringValue = ((DateTime)propertyValue).ToString(SomeCultureInfo);
    }
    else
    {
        stringValue = propertyValue.ToString();
    }

    return System.Net.WebUtility.UrlEncode(stringValue);
}

И, конечно, реализуйте различные проверки нуля и другие улучшения, но вы получите общее представление.Кроме того, что если свойство, в свою очередь, имеет сложный тип?

...