如何解决替换函数 - 没有重载方法错误 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 举报,一经查实,本站将立刻删除。