将新属性添加到字符串类 C# [重复]

Posted

技术标签:

【中文标题】将新属性添加到字符串类 C# [重复]【英文标题】:Add new property to string class C# [duplicate] 【发布时间】:2011-10-10 15:02:07 【问题描述】:

我想知道是否可以将新属性作为扩展属性添加到字符串类。我要找的是这样的

string.Empty

我想做一个扩展,例如:

string.DisplayNone;

我可以向字符串 C# 类添加扩展属性,我可以以类似的方式调用,就像我做 string.Empty 时一样?

【问题讨论】:

不,您不能添加静态扩展方法,因为扩展方法需要对象的实例 算了。乔恩说不可能***.com/questions/1676191/… :) @Cyber​​nate:不能添加静态扩展方法是正确的,但这并不是因为扩展方法需要实例。您只需要正确类型的引用,但引用可以为空。 "something".DisplayNone 有什么意义?您的代码的用户将永远对为什么 "nothing".DisplayNone 返回完全相同的东西感到困惑。了解静态属性和实例属性之间的区别。 【参考方案1】:

您只能为对象构建扩展...

类似的东西:

class Program

    static void Main(string[] args)
    
        string x = "Hello World";
        x.DisplayNow();
    


public static class StringExtension

    public static void DisplayNow(this string source)
    
        Console.WriteLine(source);
    

但我从未见过你如何扩展从未初始化的结构或类。

【讨论】:

【参考方案2】:

是的,你可以这样做..但是它将是一个扩展方法,而不是一个属性。

public static class Extensions

    public static string DisplayNone(this string instance)
    
        return "blah";
    

需要将其用作"".DisplayNone();(尽管很老套),因为它需要创建一个字符串的实例。

如果您愿意,另一种稍微不那么老套的方法是创建一个辅助类..

public static StringHelper

    public static string DisplayNone()
    
        return "blah";
    

【讨论】:

不,调用扩展方法不需要类的实例。您只需要正确类型的引用,但引用可以为空。【参考方案3】:

您也许可以创建自己的值类型。它使用“DisplayName”方法模仿 String 类型。

但是,我不明白为什么您需要在类型上使用“DisplayName”?这在 sting 实例上更有意义。 IE。 “你好”.DisplayName。请参阅 Smokefoot 对此问题的回答。

【讨论】:

以上是关于将新属性添加到字符串类 C# [重复]的主要内容,如果未能解决你的问题,请参考以下文章

使用 C# 检查 List 中是不是存在值

即使返回的字符串似乎与断言的字符串相同,断言语句也会返回 False [重复]

删除列表中的重复对象 (C#)

如何将新字符串添加到字符串中[关闭]

如何将新的字符串元素添加到字符串系列

按字符串属性C#对对象列表进行排序[重复]