各种引用方式提高string的操作效率

众所周知string的真身是具备值类型操作性质的引用类型,在本文中我们不去探讨它的区别,为了方便描述,统一把string作为值类型来理解。

例子都基于:

    class Data
    {
        public int Id { get; set; }

        public string Name;

        public string Title { get; set; }
    }

    var obj = new Data{ Id = 1, Name = "1", Title = "data-1"};

回顾传统基础认识,如果一个对象中封装了值类型与引用类型,针对该对象的操作会统一把该对象的所有属性、字段、等等都作为引用类型对待。

            var obj2 = obj;//传递引用

            obj2.Id = 2;
            obj2.Name = "2";
            obj2.Title = "title-2";

            Console.WriteLine($"obj1: {obj.Id}, {obj.Name}, {obj.Title}");
            Console.WriteLine($"obj2: {obj2.Id}, {obj2.Name}, {obj2.Title}");

          //输出:
            obj1: 2, 2, title-2
            obj2: 2, 2, title-2

根据以上的原理,天然的传递对象引用就可以间接解决以引用的方式操作对象内部各种成员:

        static void fixProperty(Data source)
        {
            if(source.Name == "john snow") source.Name = "你也配?知道北境在哪吗?";
            if(source.Title == "我想去胡建") source.Title = "龟儿子你上过几年学";
            if(source.Id == 1) source.Id = 2;
        }

            obj.Id = 1;
            obj.Name = "john snow";
            obj.Title = "我想去胡建";

            fixProperty(obj);
            Console.WriteLine($"obj: {obj.Id}, {obj.Name}, {obj.Title}");

            //得到输出:obj: 2, 你也配?知道北境在哪吗?, 龟儿子你上过几年学
            //对象内部作为值类型的int和string都已经得到改变
时间: 2024-10-12 21:05:26

各种引用方式提高string的操作效率的相关文章

Javascript入门基础知识和在HTML中的引用方式以及与JAVA之间的关系

JavaScript的基本语法: 一.执行顺序 JavaScript程序是按照出现在HTML文档中出现的顺序逐行执行的,如果需要在整个HTML文档中执行,最好将其放在HTML文件标签中.某些代码,如函数体内的代码,不会被立即执行,只有当所在函数被其他程序调用时,该代码才会被执行. 二.区分大小写 JavaScript是严格区分大小写的.例如str和Str这是两个完全不同的变量. 三.分号和空格 在JavaScript中,语句的":"是可有可无的,但大家最好每一句末尾都加上":

delphi的一些语法知识 以及参数传递问题,按引用方式传递参数,按值方式传递参数

//delphi中exit,abort,break,continue 的区别 exit: 退出函数体abort: 遇到异常,安静处理,就是不显示不提示break: 退出当前循环体,包括for ,while, repeat等循环体continue: 结束循环内的本次处理,继续从循环体的开始位置继续执行 Exit 是跳出当前代码块,也就是当前函数,跳出后是要继续向下执行的(如果有后续代码). Abort 是从 EAbort 过来的,可以激发 exception,其实质就是 Abort = Raise

css的两种引用方式 link和@import

学习web开发的最大乐趣就是不断的发现自己以前不曾见过的东西,这些东西对于我来说是那么的新鲜有趣. 比如说今天偶尔研究别人的网站,就发现了有趣的东东. 当点开此网页的css时(这个css文件命名方式就有些奇怪,后来才知道文件名里的all是什么意思) 下面就是点开之后所看见的,之后又回到源代码,但是并没有找到其它的css文件,显然下面这些语句已经引用上了所有的css语句. 下面我就对link和@import这种引用方式进行了总结,和在应用方面进行了区分. 1.link语法结构<link href=

bash中的正则工具几种引用方式的区别

在平时大量的日志数据分析时候,我们就会大量的使用正则表达式用来配合平时写的脚本来带来需要的效果,而在使用正则表达式工具的时候都是在需要在引用中,在平时我们的引用一般有3中,分别是:双引号("").单引号('').反引号(``). 其中最后一种和前2种区分还是比较简单的,反引号(``)的引用在bash中一般是用来做参数展开,用于获取最后参数运算后的结果用的,而双引号("").单引号('')这2种区别还是有点不好区分的,记得以前还有朋友来问过我,在这里就简单的说一下,从

[DB][mybatis]MyBatis mapper文件中的变量引用方式#{}与${}的差别

MyBatis mapper文件中的变量引用方式#{}与${}的差别 默认情况下,使用#{}语法,MyBatis会产生PreparedStatement语句中,并且安全的设置PreparedStatement参数,这个过程中MyBatis会进行必要的安全检查和转义. 示例1: 执行SQL:Select * from emp where name = #{employeeName} 参数:employeeName=>Smith 解析后执行的SQL:Select * from emp where n

CSS样式表引用方式

1.外部文件引用方式:(推荐使用)2.使用@import引用外部CSS文件; 3.内部文档头方式也叫内嵌法调用: 4.直接插入式也叫行内样式.它们主要的差别在于它们规定的风格使用的范围不同: 一.外部文件引用方式 外部文件引用方式即将CSS写成一个文件,在HTML文档头通过文件引用来进行风格控制. 也就是把写好的CSS属性的文件保存为文件扩展名为.CSS文件. CSS文件的引用是在HTML的标记之间写下列语句: <link rel="stylesheet" href="

CSS 选择器及各样式引用方式介绍

引用自 :我们都是从菜鸟开始 CSS 选择器及各样式引用方式介绍 一个好的界面,是一个Web吸引人们最大的卖点. Css :层叠样式表 (Cascading Style Sheets),定义了如何显示HTML元素. 1.选择器的分类 语法结构: 1.1 Id选择器 1.1.1 格式 #id :#+元素的id:id是区分大小写. 1.1.2 示例 #title1 {background-color:Blue;border-width:thick;} 1.2 Class 类选择器 1.2.1 格式

MyBatis mapper文件中的变量引用方式#{}与${}的差别

MyBatis mapper文件中的变量引用方式#{}与${}的差别 默认情况下,使用#{}语法,MyBatis会产生PreparedStatement语句中,并且安全的设置PreparedStatement参数,这个过程中MyBatis会进行必要的安全检查和转义.示例1:执行SQL:Select * from emp where name = #{employeeName}参数:employeeName=>Smith解析后执行的SQL:Select * from emp where name

CSS引用方式

CSS引用方式有4种,目前为止我们所熟知的三种分别为:外部引入.内部引入.行内样式,下面一 一进行介绍. 1.外部引入:CSS代码在一个独立的文件中,HTML通过Link标签引入到页面. 代码格式:<link rel="stylesheet" href="../css/index.css">: 注:1.link标签是head的子元素:    2.link是空元素,用于引入外部资源: 2.内部引入:将CSS代码放入HTML文档中的style元素 代码格式: