Прежде всего, я рекомендую использовать метод TryParse (), который реализован для классов-оболочек типов, таких как Int32, Double, ... и т.д. c.
Документы здесь: https://docs.microsoft.com/en-us/dotnet/api/system.double.tryparse?view=netcore-3.1
В основном он возвращает логическое значение, указывающее, был ли синтаксический анализ успешным, вместо того, чтобы прерывать программу с исключением, и помещает результат преобразования в заданную переменную.
double d;
bool res = Double.TryParse(c.ShareWhite, out d);
У вас есть чтобы убедиться, что ваша строка является допустимой double, а не чем-либо еще, или пустой строкой, потому что оба случая могут дать вам исключение формата, если вы используете простой метод Parse.
Вы должны выбрать точку останова в своей среде IDE перед шагом где вы пытаетесь выполнить синтаксический анализ (https://docs.microsoft.com/en-us/visualstudio/debugger/using-breakpoints?view=vs-2019) и проверить, какое строковое значение передается методу (Try) Parse.
Это может быть несколько шагов до или полностью из в начале вы работаете с неверным значением.