【C#6.0语法】模版字符串

很多语言已经实现了这种语法模式,所以我们C#也需要迎头赶上。

什么是模版字符串?还记得你们用过的格式化字符串吗?string.Format() 这个方法,是最常用的方法之一。下面是一个简单的例子:

var name = "张三";
var age = 24;
var address = "北京市朝阳区";
string.Format("我是{0},今年{1},家住在{2}", name, age, address);
//输出 我是张三,今年24,家住在北京市朝阳区

这样的好处是解决了拼字符串的性能问题,但又会带来一种问题,那就是长篇引起的索引问题。试想一下,如果在长篇字符串中定位索引,你是不是会吐血?比如:

string.Format(@"
--从Project表中加入项目数据
select * from (
    select ProjectName as orderCode,ProjectGUID,ProjectName,
        '--' AS '项目合计',
        '--' AS '以前年度合计',
        '--' AS '2011年合计',
        '--' AS '2011-01',
        '--' AS '2011-02',
        '--' AS '2011-03',
        '--' AS '2011-04',
        '--' AS '2011-05',
        '--' AS '2011-06',
        '--' AS '2011-07',
        '--' AS '2011-08',
        '--' AS '2011-09',
        '--' AS '2011-10',
        '--' AS '2011-11',
        '--' AS '2011-12',
        '--' AS '以后年度合计'
    from Project 
    where ProjectGUID={0}

----项目1    8FA659C8-3DA9-4330-B277-9B517E67606D    项目1    --    --    --    --    --    --    --    --    --    --    --    --    --    --    --    --

    union all
--从产品表和Project表中加入合计行数据
    select Project.ProjectName+'.'+a.ProductCode as orderCode,a.ProductGUID,a.ProductName,
        '--' AS '项目合计',
        '--' AS '以前年度合计',
        '--' AS '2011年合计',
        '--' AS '2011-01',
        '--' AS '2011-02',
        '--' AS '2011-03',
        '--' AS '2011-04',
        '--' AS '2011-05',
        '--' AS '2011-06',
        '--' AS '2011-07',
        '--' AS '2011-08',
        '--' AS '2011-09',
        '--' AS '2011-10',
        '--' AS '2011-11',
        '--' AS '2011-12',
        '--' AS '以后年度合计'
    from #product a
    left join Project on a.ProjectGUID=Project.ProjectGUID

----项目1    8FA659C8-3DA9-4330-B277-9B517E67606D    项目1    --    --    --    --    --    --    --    --    --    --    --    --    --    --    --    --
----项目1.00    00000000-0000-0000-0000-000000000000    合计    --    --    --    --    --    --    --    --    --    --    --    --    --    --    --    --
----项目1.产品1    18908255-DB67-4EA3-A231-8BB39D5B748B    产品1    --    --    --    --    --    --    --    --    --    --    --    --    --    --    --    --
----项目1.产品2    EDB216A9-EBB8-4F2C-AE4E-0A989EC7A993    产品2    --    --    --    --    --    --    --    --    --    --    --    --    --    --    --    --
----项目1.产品3    7040241F-5A66-4F17-AACA-7CBE2FB3BCB9    产品3    --    --    --    --    --    --    --    --    --    --    --    --    --    --    --    --
----项目1.产品4    108778CD-47C0-4258-9CB6-1FBE90CDEBDA    产品4    --    --    --    --    --    --    --    --    --    --    --    --    --    --    --    --
----项目1.产品5    43F7B9BA-EF91-4A38-A048-090179F33C9B    产品5    --    --    --    --    --    --    --    --    --    --    --    --    --    --    --    --

    union ALL

    --从产品表和Project表、#tempSaleDtl3中加入类型行数据
    select c.ProjectName+'.'+b.ProductCode+'.'+a.typecode as orderCode,a.ProductGUID, a.[type],
        cast(a.[项目合计] as varchar(20)),
        cast(a.[以前年度合计] as varchar(20)),
        cast(a.[2011年合计] as varchar(20)),
        cast(a.[2011-01] as varchar(20)),
        cast(a.[2011-02] as varchar(20)),
        cast(a.[2011-03] as varchar(20)),
        cast(a.[2011-04] as varchar(20)),
        cast(a.[2011-05] as varchar(20)),
        cast(a.[2011-06] as varchar(20)),
        cast(a.[2011-07] as varchar(20)),
        cast(a.[2011-08] as varchar(20)),
        cast(a.[2011-09] as varchar(20)),
        cast(a.[2011-10] as varchar(20)),
        cast(a.[2011-11] as varchar(20)),
        cast(a.[2011-12] as varchar(20)),
        cast(a.[以后年度合计] as varchar(20))
    from #tempSaleDtl3 a
    left join #product b on a.ProductGUID=b.ProductGUID
    left join Project c on b.ProjectGUID=c.ProjectGUID
) t1
order by {1}
", "ProjectName", "orderCode");

现在是写好了,但下一个需求让你加两个参数,你的索引位置又得变,还得在万码丛中查找你原来索引在哪里的,是不是很恶心??

模版字符串闪亮登场啦!

怎么用?在字符串的双引号前面加一个 $ 符号,在需要使用变量的地方用{变量}就可以了。

```cs
var name = "张三";
var age = 24;
var address = "北京市朝阳区";
$"我是{name},今年{age},家住在{address}";
//输出 我是张三,今年24,家住在北京市朝阳区

{变量}表示在字符串中输出变量的值,当然你也可以是一个表达式或者方法的执行。

$"我的生日是{GetBirth()}";

当然,调整顺序就显而易见啦,妈妈再也不用担心我把索引位置搞错啦!因为根本没有索引了,哈哈。

当然两者也可以被混用

var name = "张三";
var age = 24;
var address = "北京市朝阳区";
string.Format($"我是{name},今年{age},家住在{{0}}", address); 
//输出 我是张三,今年24,家住在北京市朝阳区

要注意的是需要用两次 {{索引}} 大括号将索引包含起来,因为一次是输出表达式,两次就转义成普通的占位符了,这点要注意!

C#中,可以使用string.Split()方法对字符串进行分割。该方法的使用形式为:string[] result = originalString.Split(separatorChars, StringSplitOptions);其中,separatorChars是一个字符数组,表示分隔符;StringSplitOptions是一个枚举类型,表示是否移除空白项。例如,以下代码将一个字符串按照逗号进行分隔: string originalString = "apple,banana,orange"; string[] result = originalString.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); foreach (string s in result) { Console.WriteLine(s); } // 输出: // apple // banana // orange 除了单个字符分隔符,还可以使用多个字符分隔符,例如以下代码将一个字符串按照逗号和空格两种分隔符进行分隔: string originalString = "apple, banana, orange"; string[] result = originalString.Split(new char[] { ',', ' ' }, StringSplitOptions.RemoveEmptyEntries); foreach (string s in result) { Console.WriteLine(s); } // 输出: // apple // banana // orange 需要注意的是,如果分隔符是一个字符串而不是一个字符,可以使用String.Split()方法的重载形式,例如以下代码将一个字符串按照换行符进行分隔: string content = "line1\nline2\nline3"; string[] getAry = content.Split(new string[] { "\n" }, StringSplitOptions.RemoveEmptyEntries); foreach (string s in getAry) { Console.WriteLine(s); } // 输出: // line1 // line2 // line3 --相关问题--: 1. C#中还有哪些常用的字符串操作方法? 2. 如何在C#中将字符串转换为数字类型? 3. C#中如何判断一个字符串
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

叫我 Teacher 周

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值