索引和长度必须指向字符串ASP.NET中的位置

时间:2014-06-16 11:55:48

标签: 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.Length);
        }
        return name;
    }

并查看

<div class="car-img">
                <img src="@IKWelcomeScreenCellViewModel.UrlImageName(viewModel.SlideShowUrls[0])" />
            </div>

名称就像这样"http://www.ua/Content/images/ik-main-page/Catalog.png" 我需要这个http://www.ua/Content/images/ik-main-page/Catalog_180x140.png

错误索引和长度必须引用字符串

中的位置

5 个答案:

答案 0 :(得分:0)

String.Substring()函数将startingIndex作为第一个参数,将Length / number作为第二个参数提取。

替换它:

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);

答案 1 :(得分:0)

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

name.Substring(extPos, name.Length);

将其更改为此,以便您只在期间选择字符串的部分。

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

或者,如果你想包含结果中的句号:

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

如果字符串中没有句号,你可能也想要额外的支票。

答案 2 :(得分:0)

extPos是文件扩展名开始的位置。现在,如果要在扩展名之前插入_180x140,可以使用不带长度的子字符串。 这将从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;
}

答案 3 :(得分:0)

如果extPos是,假设为5,字符串有10个字符,则以下行将从索引5剪辑到15,这超出了界限。

name.Substring(extPos, name.Length);

你应该这样做。

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

或简单地说,

name.Substring(extPos);

答案 4 :(得分:0)

我认为您正在寻找String.Insert

  

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

所以简单地使用

return name.Insert(extPos, "_180x140");

但是根据您的错误使用

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