C#如何比较两个字符串?附完整项目实例源码

来源:AI编程作者:缅甸程序员头衔:程序员
导读:本期聚焦于小伙伴创作的《C#如何比较两个字符串?附完整项目实例源码》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《C#如何比较两个字符串?附完整项目实例源码》有用,将其分享出去将是对创作者最好的鼓励。

在C#编程中,字符串比较是日常开发里非常常见的操作,不同的比较方式会对应不同的业务场景,比如是否忽略大小写、是否考虑文化区域差异等,选择错误的比较方式很容易引发逻辑漏洞。

C#如何比较两个字符串?附完整项目实例源码

C#字符串比较的常用方式

1. 使用==运算符比较

==运算符是C#中最直观的字符串比较方式,它默认进行的是值的比较,而不是引用比较。对于字符串类型来说,==运算符会调用Equals方法,默认使用当前文化的比较规则。

string str1 = "hello";
string str2 = "hello";
string str3 = "Hello";
// 默认比较,区分大小写
bool result1 = str1 == str2; // 结果为true
bool result2 = str1 == str3; // 结果为false

2. 使用Equals方法比较

Equals方法提供了更灵活的比较选项,可以指定比较规则,比如忽略大小写、指定文化区域等,比==运算符的适用场景更广泛。

string str1 = "hello";
string str2 = "Hello";
// 区分大小写比较,结果为false
bool result1 = str1.Equals(str2);
// 忽略大小写比较,结果为true
bool result2 = str1.Equals(str2, StringComparison.OrdinalIgnoreCase);
// 使用当前文化规则忽略大小写比较
bool result3 = str1.Equals(str2, StringComparison.CurrentCultureIgnoreCase);

3. 使用CompareTo方法比较

CompareTo方法不仅可以判断两个字符串是否相等,还可以返回两个字符串的排序关系,返回值为负数表示当前字符串小于比较字符串,0表示相等,正数表示大于。

string str1 = "apple";
string str2 = "banana";
string str3 = "apple";
// 比较排序关系,str1小于str2,返回负数
int result1 = str1.CompareTo(str2);
// 相等返回0
int result2 = str1.CompareTo(str3);
// str2大于str1,返回正数
int result3 = str2.CompareTo(str1);

4. 使用String.Compare静态方法比较

String.Compare是静态的比较方法,同样支持指定比较规则,还可以设置比较的起始位置和长度,适合部分字符串比较的场景。

string str1 = "hello world";
string str2 = "hello";
// 比较前5个字符,忽略大小写,结果为true
int result = String.Compare(str1, 0, str2, 0, 5, StringComparison.OrdinalIgnoreCase);

不同比较方式的适用场景

  • 如果只是简单判断两个字符串的值是否完全相等,且不需要特殊规则,使用==运算符即可,代码更简洁。
  • 需要忽略大小写或者指定文化区域比较时,优先使用Equals方法并传入StringComparison枚举参数。
  • 需要对字符串进行排序或者判断大小关系时,使用CompareTo或者String.Compare方法。
  • 涉及用户输入、文件名、路径等场景时,建议使用StringComparison.Ordinal或者StringComparison.OrdinalIgnoreCase,避免文化区域差异带来的问题。

完整项目实例源码

以下是一个控制台应用的完整实例,演示了各种字符串比较方式的用法和结果输出。

using System;

namespace StringCompareDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            string str1 = "hello";
            string str2 = "Hello";
            string str3 = "world";

            Console.WriteLine("===== ==运算符比较 =====");
            Console.WriteLine($"str1 == str2: {str1 == str2}");
            Console.WriteLine($"str1 == str3: {str1 == str3}");

            Console.WriteLine("n===== Equals方法比较 =====");
            Console.WriteLine($"区分大小写: {str1.Equals(str2)}");
            Console.WriteLine($"忽略大小写: {str1.Equals(str2, StringComparison.OrdinalIgnoreCase)}");

            Console.WriteLine("n===== CompareTo方法比较 =====");
            Console.WriteLine($"str1.CompareTo(str2): {str1.CompareTo(str2)}");
            Console.WriteLine($"str1.CompareTo(str3): {str1.CompareTo(str3)}");

            Console.WriteLine("n===== String.Compare静态方法比较 =====");
            int compareResult = String.Compare(str1, str2, StringComparison.OrdinalIgnoreCase);
            Console.WriteLine($"忽略大小写比较str1和str2: {compareResult} (0表示相等)");

            // 实际业务场景示例:判断用户输入的验证码是否正确,忽略大小写
            string userInputCode = "AbC123";
            string correctCode = "abc123";
            bool isCodeCorrect = userInputCode.Equals(correctCode, StringComparison.OrdinalIgnoreCase);
            Console.WriteLine($"n验证码校验结果: {isCodeCorrect}");
        }
    }
}

常见注意事项

  • 不要使用object.ReferenceEquals比较字符串值,因为字符串有驻留机制,两个值相同的字符串可能引用相同也可能不同,无法准确判断值是否相等。
  • 进行忽略大小写比较时,优先选择OrdinalIgnoreCase而不是CurrentCultureIgnoreCase,除非业务明确需要基于当前文化的规则处理。
  • 如果比较的字符串可能为null,使用Equals方法时建议将确定不为null的字符串作为调用方,避免空引用异常,也可以使用String.Equals(str1, str2, StringComparison.Ordinal)的静态重载,自动处理null的情况。
string str1 = null;
string str2 = "test";
// 静态Equals方法可以安全处理null
bool result = String.Equals(str1, str2, StringComparison.Ordinal); // 结果为false,不会抛异常

C#字符串比较EqualsCompareToStringComparison修改时间:2026-07-10 15:36:15

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。