微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

替换函数 - 没有重载方法错误 C# - 试图删除字符串中的部分

如何解决替换函数 - 没有重载方法错误 C# - 试图删除字符串中的部分

我正在尝试从 JSON 创建网址。

从 JSON 接收到的“输入”数据以 -sm 开头,我试图用“”替换它(基本上删除它)。

当使用 Replace 函数时,它会出现无重载方法错误。如何避免这种情况或如何正确构建此代码以确保没有错误?我想从所有输入数据中删除 sm-。

到目前为止我的代码

        List<string> url = new List<string>();

        //Loop which adds Input and signature to array
        foreach (JObject item in jArray)
        {

            url.Add("https://" + (string)item.SelectToken("Input").Replace("sm-","") + ".com/?sig=" + (string)item.SelectToken("signature"));
        }

确切消息:CS1501 方法“Replace”没有重载需要两个参数

解决方法

(string)item.SelectToken("Input").Replace("sm-","")

必须

((string)item.SelectToken("Input")).Replace("sm-","")

您还可以将代码拆分为单独的语句,以便于查找问题和调试。

var urls = new List<string>();

var json = "[{\"Input\": \"sm-a\",\"signature\":\"sig1\"},{\"Input\": \"sm-b\",\"signature\":\"sig2\"} ]";

var jArray = JArray.Parse(json);
foreach (JObject item in jArray)
{
    //Error handling missing
    var inputToken = (string)item.SelectToken("Input");
    var input = inputToken.Replace("sm-","");
    var signature = (string)item.SelectToken("signature");

    urls.Add("https://" + input + ".com/?sig=" + signature);
}

//urls
//"https://a.com/?sig=sig1"
//"https://b.com/?sig=sig2"
,
  • .SelectToken 方法返回 JToken 值,而不是 String 值。
  • JToken 类型 支持隐式转换为 String 值,这就是为什么您可以使用返回的 JToken就好像它是一个字符串
    • 更正:JToken 类型仅支持隐式转换一个字符串。在您的情况下,您的代码实际上是通过 JToken.ToString() 运算符隐式调用 +(String,Object)
  • 但是,依赖隐式调用 JToken.ToString() 并不是一个好主意,因此请先检查 JToken.Type - 您可以将其全部简化为单个 Linq 表达式:
List<string> urls = jArray
    .Select( item => ( input: item.SelectToken( "Input" ),sig: item.SelectToken( "signature" ) ) )
    .Where( t => t.input.Type == JTokenType.String && t.sig.Type == JTokenType.String  )
    .Select( t => ( input: (JValue)t.input,sig: (JValue)t.sig ) )  // `JTokenType.String` implies `jtoken is JValue`
    .Select( t => ( input: t.input.ToString(),sig: t.sig.ToString() ) )
    .Select( t => "https://" t.input + ".com/?sig=" + t.sig )
    .ToList();

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。