Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 索引和长度必须引用字符串ASP.NET中的位置_C#_Asp.net_Substring_Indexof - Fatal编程技术网

C# 索引和长度必须引用字符串ASP.NET中的位置

C# 索引和长度必须引用字符串ASP.NET中的位置,c#,asp.net,substring,indexof,C#,Asp.net,Substring,Indexof,我有办法 public static string UrlImageName(string name) { if (name.IndexOf("_180x140") <= 0) { var extPos = name.LastIndexOf("."); return name.Substring(0, extPos) + "_180x140" + name.Substring(extPos, name.

我有办法

public static string UrlImageName(string name)
    {
        if (name.IndexOf("_180x140") <= 0)
        {
            var extPos = name.LastIndexOf(".");
            return name.Substring(0, extPos) + "_180x140" + name.Substring(extPos, name.Length);
        }
        return name;
    }
公共静态字符串UrlImageName(字符串名称)
{
if(name.IndexOf(“_180x140”)
String.Substring()
函数将startingIndex作为第一个参数,将提取的字符长度/数量作为第二个参数

替换此项:

return name.Substring(0, extPos) + "_180x140" + 
                                 name.Substring(extPos, name.Length);
为此:

return name.Substring(0, extPos.Length - extPos) + "_180x140" + 
                        name.Substring(extPos, name.Length - extPos);

由于
Substring
的第二个参数是长度,因此每次都会失败,除非
extPos
为0:

name.Substring(extPos, name.Length);
将其更改为此,以便只选择句点之后的字符串部分

name.Substring(extPos + 1, name.Length - extPos - 1);
或者,如果要在结果中包含期间,请执行以下操作:

name.Substring(extPos, name.Length - extPos);

如果字符串中可能没有句点,您可能还需要额外的检查。

extPos
是文件扩展名开始的位置。现在,如果要在扩展名之前插入该文件,可以使用不带长度的子字符串。 这将获取从
extPos
位置开始的字符串的剩余部分,您不需要任何计算来读取扩展名

public static string UrlImageName(string name)
{
    if (name.IndexOf("_180x140") < 0)
    {
        var extPos = name.LastIndexOf(".");
        return name.Substring(0, extPos) + "_180x140" + name.Substring(extPos);
    }
    return name;
}
公共静态字符串UrlImageName(字符串名称)
{
if(name.IndexOf(“\u 180x140”)<0)
{
var extPos=name.LastIndexOf(“.”);
返回name.Substring(0,extPos)+“180x140”+name.Substring(extPos);
}
返回名称;
}

如果
extPos
是,比方说5,并且字符串有10个字符,那么下一行将从索引5剪辑到15,这超出了范围

name.Substring(extPos, name.Length);
你应该这样做

name.Substring(extPos, name.Length - extPos);
或者,简单地说

name.Substring(extPos);

我想你在找我

返回一个新字符串,其中在该实例中的指定索引位置插入了指定字符串

所以简单地使用

return name.Insert(extPos, "_180x140");
然而,根据您的错误是有关使用

return name.Substring(0, extPos) + "_180x140" + name.Substring(extPos);

请提供完整的错误。请下次做一些研究。已经有一个与您的标题相同的问题。我已经尝试过了,但没有任何帮助。谢谢大家…您真的帮助我了解了我需要从www.ua/Content/images/ik-main-page/Catalog.png到www.ua/Content/images/ik-main-page/catalog180x140.png
return name.Substring(0, extPos) + "_180x140" + name.Substring(extPos);