You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何先声明变量时C# IsStrangePair方法无法正常运行?

为什么先声明字符串字符变量会导致代码失效?

核心原因是C#代码是从上到下顺序执行的,你最初的代码里,变量初始化逻辑在空值/长度判断之前,导致传入空字符串或null时,还没走到判断逻辑就触发了异常。

最初代码的问题

当str1或str2是空字符串(Length=0)时,执行str1[0]会抛出IndexOutOfRangeException;如果是null,则会抛出NullReferenceException。这些异常会直接中断代码执行,后面的长度判断逻辑根本没机会运行。

比如传入str1="",代码刚执行到char firstCharInStr1 = str1[0];就报错了,完全走不到下面的if (str1.Length == 0 && str2.Length == 0)判断。

修改后代码有效的原因

你在开头添加的string.IsNullOrEmpty判断,会在变量初始化之前先检查字符串状态:

  • 如果任意一个字符串是空或null,直接返回str1 == str2的结果(两个都为空/null时返回true,否则返回false),不会执行后面的变量声明代码,自然避免了异常。
  • 只有当两个字符串都非空非null时,才会走到变量初始化和字符匹配的逻辑,这时候访问str[0]和str[str.Length-1]是安全的。

关于你疑惑的“变量声明顺序”

你之前认为变量必须先声明再使用,这个没错,但问题出在变量初始化时的代码会立即执行——你在声明变量时直接访问了字符串的索引,这部分代码会在所有判断逻辑之前运行,所以只要字符串不合法,就会直接报错。正确的流程应该是先做合法性校验,确认安全后再去访问字符串的字符或长度属性。

优化建议

修改后的代码里,后面的B部分判断(if (str1.Length == 0 && str2.Length == 0)等)已经完全没用了,因为前面的string.IsNullOrEmpty已经处理了所有空/null情况,可以删掉让代码更简洁:

public static bool IsStrangePair(string str1, string str2)
{
    if(string.IsNullOrEmpty(str1) || string.IsNullOrEmpty(str2))
    {
        return str1 == str2;
    }

    char firstCharInStr1 = str1[0];
    char lastCharInStr1 = str1[str1.Length-1];
    char firstCharInStr2 = str2[0];
    char lastCharInStr2= str2[str2.Length-1];

    return firstCharInStr1 == lastCharInStr2 && lastCharInStr1 == firstCharInStr2;
}

内容的提问来源于stack exchange,提问作者Priscilla

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 03:01:23