【问题标题】:Index and length must refer to a location within the string ASP.NET [duplicate]索引和长度必须引用字符串 ASP.NET 中的位置 [重复]
【发布时间】:2014-08-06 05:56:51
【问题描述】:

我有方法

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

错误索引和长度必须引用字符串中的位置

【问题讨论】:

  • 请提供完整的错误信息。
  • 下次请做一些研究。已经有一个问题与您的标题完全相同。
  • 我试过了,但没有什么是帮不上忙的
  • 谢谢大家...你们真的帮我理解了

标签: c# asp.net substring indexof


【解决方案1】:

String.Substring() 函数将起始索引作为第一个参数,将要提取的长度/字符数作为第二个参数。

替换这个:

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

【讨论】:

    【解决方案2】:

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

    name.Substring(extPos, name.Length);
    

    把它改成这个,这样你就只选择句点之后的字符串部分。

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

    或者,如果你想在结果中包含句点:

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

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

    【讨论】:

    • 我需要来自这个 www.ua/Content/images/ik-main-page/Catalog.png
    • 到这个 www.ua/Content/images/ik-main-page/Catalog_180x140.png
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      如果extPos 是 5,并且字符串有 10 个字符,那么下一行将从索引 5 剪辑到 15,这超出了界限。

      name.Substring(extPos, name.Length);
      

      你应该这样做。

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

      或者,简单地说,

      name.Substring(extPos);
      

      【讨论】:

        【解决方案5】:

        我想你在找String.Insert

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

        所以简单地使用

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

        但是根据您的错误使用

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-03-15
          • 1970-01-01
          • 1970-01-01
          • 2012-06-24
          • 1970-01-01
          相关资源
          最近更新 更多