天津自助建站软件,克隆网站怎么做,做借贷网站平台,荆门网站开发有哪些string内插是指用$日期#xff1a;{DateTime.Now.ToString(yyyy年MM月dd日)}。#xff0c;这种使用方式#xff0c;在c#10.0时#xff0c;引进了这种string内插的处理#xff0c;可以写自定义的处理程序#xff0c;来提升使用体验。具体用法见下… string内插是指用$日期{DateTime.Now.ToString(yyyy年MM月dd日)}。这种使用方式在c#10.0时引进了这种string内插的处理可以写自定义的处理程序来提升使用体验。具体用法见下面的代码/// summary
/// string内插处理类型
/// /summary
[InterpolatedStringHandler]
public ref struct TestInterpolatedStringHandler
{/// summary/// 构建字符串的stringbuilder/// /summaryStringBuilder builder;/// summary/// 两个长度是必需的/// /summary/// param nameliteralLength/param/// param nameformattedCount/parampublic TestInterpolatedStringHandler(int literalLength, int formattedCount){builder new StringBuilder(literalLength);}/// summary/// 添加非格式化部分如果被 {}分隔会调用多次/// /summary/// param names/parampublic void AppendLiteral(string s){builder.Append(s);}/// summary/// 添加格式化部分如果有多个{}会调用多次/// /summary/// typeparam nameT/typeparam/// param namet/parampublic void AppendFormattedT(T t){builder.Append(t?.ToString());}internal string GetFormattedText() builder.ToString();
}那这个自定义的内插处理程序有什么用呢我们举个实际的例子吧如果把处理程序带入参数就能用效的来控制ApppendLiteral和AppendFormatted了。通过传入角色role来决定AppendFormatted时用正常的内容或是用脱敏的******这样一来就把判断处理工作交给了内插处理程序了当然这只是很少的一块可以根据role类型进行不同权限层次的脱敏从而形成了一个自定义内插脱敏的模块。具体代码如下using static System.Console;
using System.Runtime.CompilerServices;
using System.Text;var name 张三;
var total 10000.0m;
var result TestParameter(admin, $本次向 {name} 转账{total} 元);
WriteLine(result);result TestParameter(viewer, $本次向 {name} 转账{total} 元);
WriteLine(result);static string TestParameter(string role, [InterpolatedStringHandlerArgument(role)] ParameterInterpolatedStringHandler handler)
{return handler.GetFormattedText();
}[InterpolatedStringHandler]
public ref struct ParameterInterpolatedStringHandler
{/// summary/// 构建字符串的stringbuilder/// /summaryStringBuilder builder;string _role;/// summary/// 两个长度是必需的/// /summary/// param nameliteralLength/param/// param nameformattedCount/parampublic ParameterInterpolatedStringHandler(int literalLength, int formattedCount, string role){_role role;builder new StringBuilder(literalLength);}/// summary/// 添加非格式化部分如果被 {}分隔会调用多次/// /summary/// param names/parampublic void AppendLiteral(string s){builder.Append(s);}/// summary/// 添加格式化部分如果有多个{}会调用多次/// /summary/// typeparam nameT/typeparam/// param namet/parampublic void AppendFormattedT(T t){if (_role.ToLower() admin){builder.Append(t?.ToString());}else{builder.Append(******);}}internal string GetFormattedText() builder.ToString();
}