null
и пустая строка - это совершенно разные вещи. null
означает, что значения нет, а пустая строка является строкой, просто пустая. Вы не можете вызвать .ToString()
или .Length
в ноль, вы получите исключение именно потому, что нет значения для обработки этого вызова.
Вы можете использовать Dictionary.TryGetValue проверить наличие и получить значение одновременно.
После этого, если вы действительно хотите преобразовать все в строку, вы можете использовать условно-нулевой оператор ?.
для вызова ToString()
без выброса, если name
равно нулю , Если name
равно нулю, все выражение name?.ToString()
также оценивается как null
.
Затем вы можете использовать оператор слияния нуля ??
для замены нуля значением по умолчанию значение:
var de= new Dictionary<string, object?>();
de["Name1"]=null;
de["Name2"]=42;
if(de.TryGetValue("Name2",out var name))
{
var valueAsString=name?.ToString() ;
parameters.Add("Name2", valueAsString ?? "unknown");
}
Если вы просто хотите заменить пустые значения на значения по умолчанию, вам не нужно ToString()
:
if(de.TryGetValue("Name2",out var name))
{
parameters.Add("Name2", name ?? "unknown");
}
Если вы хотите проверить на нулевое или пустое значение , вы можете использовать String.IsNullOrEmpty :
if(de.TryGetValue("Name2",out var name))
{
var newValue=String.IsNullOrEmpty(name)
? "unknown"
: name.ToString(); //Only if we want to format to strings
parameters.Add("Name2", newValue);
}
Наконец, если вы хотите заменить существующие ключи в словаре parameters
, используйте
parameters["Name2]= newValue;