我正在尝试扩展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.也许在未来的版本中.