为什么使用 string.Join 时空值会自动转换为空字符串?
Why does a null value automatically get converted into empty string when using string.Join?
我有一个包含空值的 JArray。当我做 string.Join
时,null
值正在转换为 empty string
.
原始数组值:
[
null,
null,
"America/Boise",
false,
"2021-02-04T06:51:33.9686227Z"
]
String.Join:
var val = $"('{string.Join("','", valuesArray)}')";
当前结果:
"('','','America/Boise','False','2/4/2021 6:51:33 AM')"
预期结果:
"(null,null,'America/Boise',False,'2/4/2021 6:51:33 AM')"
生成示例:
https://dotnetfiddle.net/5nRTyL
如何使用 string.Join
获得预期结果?
因为它就是这样设计的。请参阅 String.Join 的文档:
If separator is null, an empty string (String.Empty) is used instead. If any element in value is null, an empty string is used instead.
只需将“''”替换为“null”即可。
var val = $"('{string.Join("','", valuesArray)}')".Replace("''", "null");
null
JArray
中的值存储为 JTokens
,JTokenType
为 Null
。所以你需要检查这个并将它们转换为字符串 "null"
。其次,由于您只想引用某些值,因此在连接它们时不应将引号放在分隔符值中,而应根据其类型只引用需要它的值。
定义以下辅助函数:
string TokenToString(JToken token)
{
switch (token.Type)
{
case JTokenType.Null:
return "null";
case JTokenType.Date:
case JTokenType.String:
return $"'{token}'";
default:
return token.ToString();
}
}
然后你可以得到你想要的结果:
string val = $"({string.Join(",", valuesArray.Select(v => TokenToString(v)))})";
此处的工作演示:https://dotnetfiddle.net/Q62Uck
我有一个包含空值的 JArray。当我做 string.Join
时,null
值正在转换为 empty string
.
原始数组值:
[
null,
null,
"America/Boise",
false,
"2021-02-04T06:51:33.9686227Z"
]
String.Join:
var val = $"('{string.Join("','", valuesArray)}')";
当前结果:
"('','','America/Boise','False','2/4/2021 6:51:33 AM')"
预期结果:
"(null,null,'America/Boise',False,'2/4/2021 6:51:33 AM')"
生成示例: https://dotnetfiddle.net/5nRTyL
如何使用 string.Join
获得预期结果?
因为它就是这样设计的。请参阅 String.Join 的文档:
If separator is null, an empty string (String.Empty) is used instead. If any element in value is null, an empty string is used instead.
只需将“''”替换为“null”即可。
var val = $"('{string.Join("','", valuesArray)}')".Replace("''", "null");
null
JArray
中的值存储为 JTokens
,JTokenType
为 Null
。所以你需要检查这个并将它们转换为字符串 "null"
。其次,由于您只想引用某些值,因此在连接它们时不应将引号放在分隔符值中,而应根据其类型只引用需要它的值。
定义以下辅助函数:
string TokenToString(JToken token)
{
switch (token.Type)
{
case JTokenType.Null:
return "null";
case JTokenType.Date:
case JTokenType.String:
return $"'{token}'";
default:
return token.ToString();
}
}
然后你可以得到你想要的结果:
string val = $"({string.Join(",", valuesArray.Select(v => TokenToString(v)))})";
此处的工作演示:https://dotnetfiddle.net/Q62Uck