精华内容
下载资源
问答
  • C#的Contains() 值还是引用

    千次阅读 2012-02-09 20:05:25
    这里讨论的是List的Contains方法,Contains方法默认调用类型T的Equals方法 而Object类的Equals方法支持值类型的比较和引用类型的比较,即如果继承自Object的类是引用类型的(C#中的所有类都继承自Object类),那么...

    这里讨论的是List<T>的Contains方法,Contains方法默认调用类型T的Equals方法

    而Object类的Equals方法支持值类型的比较和引用类型的比较,即如果继承自Object的类是引用类型的(C#中的所有类都继承自Object类),那么该类的Equals就比较是否引用了同一个对象。相反Struct结构体是值类型的,它的Equals方法使用值类型比较。

    C#中的String类比较特殊,唯独此类不符合上面的规定。虽然String为引用类型,但比较时使用值类型的比较方法。

    string s = new string('d',2);
    string x = "dd";

    s.Equals(x)的值为true

    所以一般情况下C#中可以把string当成是值类型。

    有一点需要注意,当Equals进行值类型的比较两个struct结构体时,对于其内部的字段,也会根据字段的类型使用值比较或者引用比较,不会因为是在比较两个结构体而对其中所有的字段都进行值的比较。

    举例说明:下面是用到的结构体和类

    struct A
        {
            public B x;
        }
        class B
        {
            string str;
            public B(string str)
            {
                this.str = str;
            }
        }

    第一种尝试,结果打印出OK:

        class Program
        {
            static void Main()
            {
                B b = new B("3");
    
                A a = new A();
                a.x = b;
    
                A aa = new A();
                aa.x = b;
                
                if (a.Equals(aa))
                {
                    Console.WriteLine("OK");
    
                }            
    
            }
    
        }

    第二种尝试,结果没有打印出任何东西:

        class Program
        {
            static void Main()
            {
                A a = new A();
                a.x = new B("3");
    
                A aa = new A();
                aa.x = new B("3");
                
                if (a.Equals(aa))
                {
                    Console.WriteLine("OK");
    
                }            
    
            }
    
        }
     
    转:http://www.cnblogs.com/antech/archive/2011/12/25/2300775.html
    展开全文
  • C#中变量可分为值类型和引用类型,值类型储存在栈中,引用类型储存在堆中,栈中储存在堆中引用地址,List泛型Contais在比较值类型时,直接比较值,但是在比较引用类型时,比较是引用地址。 问题引入 实际开发...

    导读

    C#中变量可分为值类型和引用类型,值类型储存在栈中,引用类型储存在堆中,栈中储存在堆中的引用地址,List泛型的Contais在比较值类型时,直接比较值,但是在比较引用类型时,比较的是引用地址。

    • 问题引入

    实际开发中,我们经常会把同类型的一系列对象封装到List集合中,当我们有需要在封装对象到List集合中时,排除重复的对象,这时直接使用

    if(!List.Contains(obj))
    {
        List.Add(bj);
    }

    List.Contains(obj)返回false时 ,我们给集合中添加,这种逻辑是没有问题的,List.Contains(obj)比较的是:原来List集合中的对象的储存地址和当前需要添加对象obj在堆中储存的地址 ,所以即便有两个对象相等,但是它们储存的地址不同,所以List.Contains仍然返回false

    • 解决方案
      List.Contains(obj)调用的是obj对象对应的类的Equals()方法,我们可以按需要重写这个方法和GetHashCode()方法,即可按自己的需求来定义Contains()比较方式。

    • 案例

    public class Person
    {
       private string Number;
       private string personName;
    
       public Person(string name, string Number)
       {
          this.personName = name;
          this.Number= Number;
       }
    
       public bool Equals(Person p)
       {
           //按需求定制自己需要的比较方式
          return (this.personName == p.personName && this.Number == p.Number);
       }
    
       public override int GetHashCode()
       {
          return this.Number.GetHashCode(); 
       }
    }
    
    public class Example
    {
       public static void Main()
       {
          Person p1 = new Person("John", "63412895");
          Person p2 = new Person("Jack", "63412895");
          List<Person> List = new List<Person>();
          List.Add(p1);
          List.Add(p2);
          Person p3 = new Person("John", "63412895");
          if(!List.Contains(p3))//没有重写前函数返回false,现在返回true
          {
              List.Add(p3);
          }
       }
    }

    MSDN关于Equels重写的介绍

    展开全文
  • C#的Contains与IndexOf的区别

    千次阅读 2017-12-10 23:27:06
    C#中要判断一个字符串是否包含另一个字符串,常用两种方法是 str.Contains和str.IndexOf 这两个方法区别是: Contains是找指定字符串是否包含一个字串,返回值boolean类型,即只有true和false IndexOf有多...

    C#中要判断一个字符串是否包含另一个字符串,常用的两种方法是
    str.Contains和str.IndexOf
    这两个方法的区别是:
    Contains是找指定字符串是否包含一个字串,返回值的boolean类型,即只有true和false
    IndexOf有多个重载,但无论哪个,都是做一定的匹配,然后把匹配的第一个字符的位置返回,返回的是int类型,如果没找到,那么返回-1
    [csharp] view plain copy
    IndexOf()
    查找字串中指定字符或字串首次出现的位置,返首索引值,如:
    str1.IndexOf(“字”); //查找“字”在str1中的索引值(位置)
    str1.IndexOf(“字串”);//查找“字串”的第一个字符在str1中的索引值(位置)
    str1.IndexOf(“字”,start,end);//从str1第start+1个字符起,查找end个字符,查找“字”在字符串STR1中的位置[从第一个字符算起]注意:start+end不能大于str1的长度

    indexof参数为string,在字符串中寻找参数字符串第一次出现的位置并返回该位置。如string s=”0123dfdfdf”;int i=s.indexof(“df”);这时i==4。
    如果需要更强大的字符串解析功能应该用Regex类,使用正则表达式对字符串进行匹配。

    indexof() :在字符串中从前向后定位字符和字符串;所有的返回值都是指在字符串的绝对位置,如为空则为- 1

    string test=”asdfjsdfjgkfasdsfsgfhgjgfjgdddd”;

    test.indexof(’d’) =2 //从前向后 定位 d 第一次出现的位置
    test.indexof(’d’,1) =2 //从前向后 定位 d 从第三个字符串 第一次出现的位置
    test.indexof(’d’,5,2) =6 //从前向后 定位 d 从第5 位开始查,查2位,即 从第5位到第7位;

    lastindexof() :在字符串中从后向前定位字符和字符串;、
    用法和 indexof() 完全相同。

    下面介绍 IndexOfAny ||lastindexofany

    他们接受字符数组做为变元,其他方法同上,返回数组中任何一个字符最早出现的下标位置

    如下

         char[] bbv={’s’,’c’,’b’};  
         string abc = "acsdfgdfgchacscdsad";  
    
         Response.Write(abc.IndexOfAny(bbv))=1  
         Response.Write(abc.IndexOfAny(bbv, 5))=9  
         Response.Write(abc.IndexOfAny(bbv, 5, 3))=9  
    

    lastindexofany 同上。

    substring() 用法

    string a=”aadsfdjkfgklfdglfd”

    a.substring(5) //截取从第五位以后的所有字符串

    a.substring(0,5) //截取从第0到第5 以后的所有字符串

    展开全文
  • 一,我们先看看代码: string aa = "1,2,3,44"; string cc = "444"; var a = aa.Split(',').Contains("4"); var c = cc.Contains("4"); Console.Wri...

    一,我们先看看代码:

                string aa = "1,2,3,44";
                string cc = "444";
                var a = aa.Split(',').Contains("4");
                var c = cc.Contains("4");
                Console.WriteLine("a输出" + a);
                Console.WriteLine("c输出" + c);        

    二,我们的输出结果为:

     看到这里是不是很多人都跟我有同样的疑惑,为什么a是false?我们来看看封装好的解释:

    1》,对应a输出

    2》,对应c输出

    综上,我们可以理解为,两个方法的选着对比源不一样

     1》在a中,我们的源是一整个集合, 通过使用默认的相等比较器确定序列是否包含指定的元素,则是说,这个集合到底有没包含4这个字符串,44和4判定为不一致,这里的比较点是44和4,而不是44里面的字符和4比较,所以这里的44和4判定为不一致的

    2》而在c中,我们可以看到该值指定的字符串对象是否出现在此字符串中,这就是说,44和4的比较是指,4这个字符串时候在44出现过,这时返回的结果就是true了

     

    转载于:https://www.cnblogs.com/May-day/p/8632064.html

    展开全文
  • Contains类似于sql中in用法 首先取数据 //把要查询ID按(xx,xx,xx)取出来。也就是说idlist结果是(xx,xx) //Data是个集合,比如List string idlist = string.Join(",", Data.Select(d => d.ID).ToArray())...
  • 下文中:关于C#语法特性部分需要Visual Studio 2019支持。关于.NET Core部分需要安装.NET 3.0 Preview4,低版本或许也可以但我没实验。如果要在最新版VS2019中使用.NET 3.0,可能需要在 选项 - 解决方案与项目...
  • 今天改bug,遇到一个奇怪问题,实体对象明明已经Add到集合中了,但List.Contains(entity);就是不起作用。 临时找个方式代替了 bool flag = list.Exists(o => o.Id == entity.Id); if (!flag) { list.Add...
  • c#queue C#Queue.Contains()方法 (C# Queue.Contains() method) Queue.Contains() method is used to check whether a given object/element exists in a Queue or not, it returns true if object/element exists ...
  • 一、什么是HashtableHashtable,中文叫哈希表。它里面英文Hash,音译是哈希。但Hash还有另一个翻译,就是“散列”,...二、C#中如何声明一个Hashtable您直接new一个Hashtable对象即可,如下所示:Hashtable hasht...
  • C# Lambda表达式Contains方法like 原文:Lambda表达式Contains方法like 1、使用Contains方法必备条件: Contains等价于SQL中like语句。不过Contains只针对于字符串(string)类型数据...
  • 方法 C#String.Contains()方法 (C# String.Contains() Method) String.Contains() method is used to check whether a given string contains a substring or not, we can use this method when we need to c...
  • if(("1,2,3").Contains("")) { MessageBox.Show("Yes") } else { MessageBox.Show("No") } 这样条件,总是返回True,感觉很奇怪,因为之前没有遇到过。 后来请教...
  • 关于C#的Equals和Contains方法

    千次阅读 2016-03-30 13:46:01
    扫除前进路上又一路障
  • C#提供了Contains函数生成数据库语句是使用了CHARINDEX效率比Like % 高多了Sql中CHARINDEX用法 CHARINDEX作用 写SQL语句我们经常需要判断一个字符串中是否包含另一个字符串,但是SQL SERVER中并没有像C#提供了...
  • bool a = Commond.evenList.Contains(ce);//判断evenList里面是否存在相同对象 问题是现在它一直等于false if (a) continue;//如果存在就continue Commond.evenList.Add(ce); } Console.WriteLine(s); ...
  • 前面有一篇文章写了关于Socket一些理解,今天小编就用C#来实现以下某聊天软件多人聊天系统(别问我为啥不用C++,只是因为C#效率高,一个字爽啊)。我们先来看一下整体思路:整体思路是利用线程池达到接收多个...
  • c# array.copy Wouldn’t it be nice if you could test whether an element is contained in an array by using a Contains method just like the one available on List objects? Wouldn’t it ...
  • 总所周知,.NET5.0马上就要来了,最后一个预览版RC2也已经发布了,在11月时候,我们就正式发布了,然后我们就可以迁移使用了,当然今天说重点不是.NET,今天说是伴随着.NET5一起到来的C#9.0,既然要了解9.0...
  • 1 function isContains(str, substr) { 2 return str.indexOf(substr) >... substr为查找字符;  返回true代表包含,false代表不包含。 转载于:https://www.cnblogs.com/xinwenpeng/p/9818698.ht...
  • HashSet和Queue的Contains()的代码是不一样的,Queue的慢很多,写练习的时候发现的 https://blog.csdn.net/fenglibing/article/details/9021201
  • 的Contains方法,Contains方法默认调用类型T的Equals方法 而Object类的Equals方法支持值类型的比较和引用类型的比较,即如果继承自Object的类是引用类型的(C#中的所有类都继承自Object类),那么该类的Equals就...
  • C# string IndexOf, Contains

    2019-10-07 18:55:31
    对于同样可以用Index和Contains实现功能, 用数据实验发现,IndexOf性能要比Contains快很多。 Contains甚至比用Regex还慢。 转载于:...
  • List<string> 的Contains 是区分大小写的 代码: List<string> test = new List<string>(); test.Add("aaa"); test.Add("BBB"); test.Add...
  • 1、使用Contains方法必备条件: Contains等价于SQL中like语句。不过Contains只针对于字符串(string)类型数据而言。如果是int等数值类型,则不会有Contains方法存在,因此数值字段貌似无法通过使用Lambda...
  • C#/.Net Core/WPF框架初建(国际化、主题色)English | 简体中文 作为 TerminalMACS 一个子进程模块 - WPF管理端,目前搭建框架部分功能:本地化、国际化、主题色修改等。导航目录框架已添加功能说明1.1. 国际化、...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 570
精华内容 228
关键字:

c#的contains

c# 订阅