如何在c#中扩展String.Space类似于String.Empty?

Mar*_*eio -1 c#

我正在尝试扩展System.String并添加一个静态字段String.Space,它表示单个空间" ",就像Microsoft String.Empty在命名空间中实现的方式一样Using System;.我无法实现此扩展请帮助.


我想实现一种字段扩展...

在此输入图像描述

想要结果就像

在此输入图像描述

Dis*_*nky 12

你可以static class这样;

public static class Strings
{
    public const string Space = " ";
}
Run Code Online (Sandbox Code Playgroud)

并在你的代码中使用它;

FullName = FirstName + Strings.Space + MiddleName + Strings.Space + LastName;
Run Code Online (Sandbox Code Playgroud)

但是,最终目标是使代码可维护,合理有效并减少出错的可能性.考虑到这一点,最好减少连接数,并提供所需的值.为此,一个简单的格式字符串将是一个更清洁的方法; (前C#6);

FullName = string.Format("{0} {1} {2}", FirstName, MiddleName, LastName);
Run Code Online (Sandbox Code Playgroud)

如果C#6 +;

FullName = $"{FirstName} {MiddleName} {LastName}";
Run Code Online (Sandbox Code Playgroud)

为什么要使用最后两种方法?那么,它归结为关注点的分离.保留字符串格式string.Format()并简单地提供您需要的值.通过在混合中使用更少的组件来减少错误的可能性,通过减少组件的维护开销来减少错误的可能性,并通过减少执行连接所涉及的字符串数来提高效率.

编辑

至于"为什么不支持C#扩展属性",我想提取报价林多斯Pechos链接从C#语言开发团队;

当然,显而易见的是,扩展方法的自然伴随是扩展属性.由于某种原因,不太明显的是,扩展事件,扩展操作符,扩展构造函数(也称为"工厂模式")等也是自然的伴侣.但我们甚至没有考虑为C#3设计扩展属性; 我们知道他们没有必要,并且会增加已经风险的时间表的风险,因为没有令人信服的收益.

基本上它归结为扩展属性的"没有迫切需要",允许你创建类似的东西string.Space.也许在未来的版本中.