gpt4 book ai didi

c# - 如何使用 string.Substring(char, char) 而不是 string.Substring(int, int)?

转载 作者:太空狗 更新时间:2023-10-29 21:03:50 25 4
gpt4 key购买 nike

我制作了返回 leftCharrightChar 之间的字符串的扩展方法:

    public static string Substring(this string This, char leftChar, char rightChar)
{
int i_left = This.IndexOf(leftChar);
if (i_left >= 0)
{
int i_right = This.IndexOf(rightChar, i_left);
if (i_right >= i_left)
{
return This.Substring(i_left + 1, i_right - i_left - 1);
}
}
return null;
}

当我这样调用它时:

    string str = "M(234:342);".Substring('(', ')');

我得到异常:

System.ArgumentOutOfRangeException: startIndex не может быть больше, чем длина строки. Имя параметра: startIndex в System.String.Substring(Int32 startIndex, Int32 length)

扩展方法的命名空间和调用代码是正确的。 IntelliSense 建议我使用 3 种扩展方法(两种基本方法和一种我的方法)。

(extension) string string.Substring(char leftChar, char rightChar)

很明显,string.Substring(int startIndex, int Length) 与我的扩展方法重叠,因为编译器自动将 char 转换为 int。

有没有办法强制编译器不将 char 转换为 int


  • 如果我重命名扩展方法(如 Substring2),一切正常。
  • 如果我将 chars 更改为 params char[],如果我像 params 一样调用它,它就不起作用,但当然像数组一样工作。
  • 如果我删除扩展方法,"M(234:342);".Substring('(', ')') 不会抛出任何编译错误,但仍会抛出异常。
  • 如果我在扩展方法中将 chars 更改为 strings,它也可以工作。这是我目前最喜欢的这个问题的解决方案 - 将我的 Substring(char, char)Substring(string, string) 结合起来检查输入字符串的长度。

最佳答案

Is there a way to force the interpreter not to do the cast char to int?

没有。当遇到针对目标表达式执行的方法调用时,编译器首先检查目标声明类型上的任何实例方法是否与参数兼容。如果没有兼容的方法,它只会寻找扩展方法。

在您的情况下,常规 string.Substring(int, int) 方法与参数 (char, char) 兼容,因为 的隐式转换charint

最简单的解决方案是重命名您的扩展方法 - 可能类似于 SubstringBetween

关于c# - 如何使用 string.Substring(char, char) 而不是 string.Substring(int, int)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56898822/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com