为什么“是”方法不运行?

卡米拉A.

我有应该接受变量的这段代码usersResp,查看它是否与yes数组中的元素匹配(即在Yes方法中)并打印出变量Case根据匹配情况,要么是0没有匹配项(数组中没有与相同的元素usersResp),要么1是元素匹配。

这是代码。

static void Main(string[] args)
{
   string usersResp = "y";
   int Case = 0;
   Yes(usersResp, Case);
   Console.WriteLine(Case);
}

static void Yes(string UserResponse, int Case)
{
    string[] yes = new string[] { "y", "Y", "Yes", "yes", "yup", "Yup", "ok", "Ok", "Alright", "alright", "yeah", "Yeah", "Sure", "sure", "of course", "Of course", "k", "K" };

    for (int i = 0; i < yes.Length; i++)
    {
        if (UserResponse == yes[i])
        {
            Case = 1;
            return;
        }
    }
}

我不知道为什么它运行不正确并且Case始终保持为0。请提供帮助。谢谢。

00110001

忽略概念上或其他方面的任何其他问题。

您将需要int case通过引用传递,而不是传递价值

static void Yes(string UserResponse, ref int Case)

其他资源

通过引用传递参数

在方法的参数列表中使用时,ref关键字指示参数是通过引用而不是通过值传递的。ref关键字使形式参数成为参数的别名,该别名必须是变量。换句话说,对参数的任何操作都是在自变量上进行的。

您可以执行此操作的另一种方法是将aHashSet字符串比较器一起使用仅需使用即可为您提供良好的快速查找Contains在下面的示例中,我使用StringComparer.InvariantCultureIgnoreCasewhich将不区分大小写

public static HashSet<string>  YesHashSet = new(
   new[] { "y", "yes", "yup", "ok", "alright", "Yeah", "sure", "of course", "K" },
   StringComparer.InvariantCultureIgnoreCase);
...

public static bool IsYes(string userResponse)
   => YesHashSet.Contains(userResponse);

更多资源

HashSet<T>

代表一组值。

HashSet<T>(IEnumerable<T>, IEqualityComparer<T>)

初始化HashSet类的新实例,该实例使用指定的相等比较器作为集合类型,包含从指定的集合复制的元素,并具有足够的容量来容纳复制的元素数量。

StringComparer.InvariantCultureIgnoreCase Property

获取一个StringComparer对象,该对象使用不变区域性的单词比较规则执行不区分大小写的字符串比较。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章