[英]How to extend String.Space similar to String.Empty in c#?
您可以有一個像這樣的static class
;
public static class Strings
{
public const string Space = " ";
}
並在您的代碼中使用它;
FullName = FirstName + Strings.Space + MiddleName + Strings.Space + LastName;
但是,最終目標是使代碼可維護,合理有效並減少錯誤的可能性。 考慮到這一點,最好減少連接數並僅提供所需的值。 為此,簡單的格式字符串將是一種更清潔的方法。 (C#6之前的版本);
FullName = string.Format("{0} {1} {2}", FirstName, MiddleName, LastName);
如果是C#6 +;
FullName = $"{FirstName} {MiddleName} {LastName}";
您為什么要使用后兩種方法? 好吧,這歸結為關注點分離。 將字符串格式保留為string.Format()
並僅提供所需的值。 您可以通過減少組合中的組件來減少錯誤的可能性,以相同的方式減少維護開銷,並通過減少執行連接所涉及的字符串數來提高效率。
編輯
至於“為什么c#不支持擴展屬性?”,我從C#語言開發團隊的Lindos Pechos的鏈接中摘錄了一句話;
當然,顯而易見,擴展方法的自然伴侶是擴展屬性。 由於某種原因,擴展事件,擴展運算符,擴展構造函數(也稱為“工廠模式”)等也是自然的伴侶,這一點不太明顯。 但是我們甚至沒有考慮為C#3設計擴展屬性。 我們知道它們不是必需的,並且會給原本危險的時間表增加風險,而不會帶來令人信服的收益。
基本上,歸結為擴展屬性的“沒有迫切需求”,以允許您創建諸如string.Space
類的string.Space
。 也許在將來的版本中。
不幸的是,該框架(在撰寫本文時為v4.7)目前不支持擴展屬性/字段。 在“為什么沒有擴展屬性?”中可以看到對此的很好的記錄。
這意味着您僅限於使用擴展方法。 這樣的例子之一:
namespace System.String
{
public static class Extensions
{
public static string Space(this string s)
{
return " ";
}
}
}
擴展方法需要一個對象的實例。 因此可以這樣使用:
// Returns " "
var space = "".Space();
要么
// Returns " "
var space = String.Empty.Space();
這屬於“雖然不漂亮,但是有效”類別之一。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace StringFunctions.Extensions
{
public static class StringExtensions
{
public static readonly string Space = " ";
public static string Spacemethod(this string name)
{
return string.Concat(name," ");
}
}
}
在該位置使用String類的別名。 喜歡
使用String = StringFunctions.Extensions.StringExtensions;
小字符串是保留字,因此會拋出錯誤。如果您得到String.Space w =它是整個類的工作場所,則其他字符串函數調用(例如string.Empty
將這樣調用String.Space
using String = StringFunctions.Extensions.StringExtensions;
namespace StringFunctions
{
class Program
{
static void Main(string[] args)
{
var t = String.Space;
}
}
}
我能夠做到以下幾點。 您會得到一個警告,但會編譯。
namespace System
{
public static partial class String
{
public static string Space = " ";
}
}
致電:
string sp = String.Space;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.