首页 > 解决方案 > 为什么使用 string.Join 时空值会自动转换为空字符串?

问题描述

我有一个包含空值的 JArray。当我在做的时候string.Joinnull价值观正在被转换成empty string.

原始数组值:

[
  null,
  null,
  "America/Boise",
  false,
  "2021-02-04T06:51:33.9686227Z"
]

字符串连接:

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

标签: c#json.net

解决方案


nulla 中的值与 a ofJArray一样存储。因此,您需要检查这一点并将它们转换为 string 。其次,由于您只想引用某些值,因此在加入它们时不应将引号放在分隔值中,而应仅根据其类型引用需要它的值。JTokensJTokenTypeNull"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


推荐阅读