簡體   English   中英

如何在C#中擴展類似於String.Empty的String.Space?

[英]How to extend String.Space similar to String.Empty in c#?

我試圖擴展System.String並添加一個靜態字段String.Space ,它代表一個空格" " ,就像Microsoft如何在Using System;的名稱空間中實現String.Empty一樣Using System; 我無法實施此擴展程序,請幫助。


我想實現一種字段擴展...

在此處輸入圖片說明

想要這樣的結果

在此處輸入圖片說明

您可以有一個像這樣的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM