为什么 ToString() 不适用于 String 类型,解决方法是什么?

Why is ToString() not working on a type String , and what is the work around?

我正在将 excel 中的行读入模型,并且 excel returns 将“10%”或“20%”等输入读为“0.1”, 0.2" 字符串 。将该字符串转换为 string 的最佳方法是什么 "20%" , "10%" 并避免不必要的转换,以免损失性能?所以为了澄清,我需要将字符串转换为字符串,但程序显然不允许我这样做。我可以将该字符串转换为双精度,然后使用 ToString("#0.##%") 将该双精度转换为字符串,但我想知道是否有更快的方法。

这是读取行并将 excel 列格式化为模型道具类型的代码

static T ReadRow<T>(ExcelWorksheet worksheet, int rowNum)
    {
        var o = (T)Activator.CreateInstance(typeof(T));
        int colNum = 1;
        foreach (var p in typeof(T).GetProperties())
        {
            if (worksheet.Cells[rowNum, colNum].Value != null)
            {
                p.SetValue(o, Convert.ChangeType(worksheet.Cells[rowNum, colNum].Value, p.PropertyType));
            }
            colNum++;
        }
        return o;

您获得 10% 作为 .01 的原因是该数字仅存储为 .01,读取 excel 时您将获得其实际存储值。您将其视为 10%,因为它在 excel 中被格式化为 %。 要读取百分比:10% 作为字符串 '10%',您必须在读取时格式化字符串。

扩展 prachi 提供的将字符串转换为所需结果的解决方案。

string val = "0.2"; // for reference

string.Format("{0}%", Convert.ToDouble(val) * 100);