【问题标题】:c# is it possible to create extension method for string keyword [duplicate]c#是否可以为字符串关键字创建扩展方法[重复]
【发布时间】:2020-03-03 12:00:08
【问题描述】:

我创建了一个扩展方法,用于像这样从System.Guid 生成字符串。

public static class Fnk
{

    public static string Guid(bool dash = true)
    {
        return dash ? System.Guid.NewGuid().ToString() : System.Guid.NewGuid().ToString("N");
    }
}

我像Fnk.Guid() 一样使用它。我想知道,是否可以像string.Guid() 这样称呼它?如果是,怎么做?

【问题讨论】:

  • this sting variableName 必须是第一个参数。在您的代码中,您只需根据条件返回一个 guid 值
  • 一个扩展方法的参数是this-kewyord。您的代码不是扩展方法。
  • 您想将字符串解析为 guid 吗? string.Guid() 方法会做什么?
  • 另外,Guid 已经有一个用于生成无破折号字符串的选项。 Guid.NewGuid().ToString("N")
  • 对不起,我不明白这有什么意义。 Guid has an overload of ToString that takes in a string as a format specifier - 使用 "N" 删除破折号。

标签: c# extension-methods


【解决方案1】:

可以像string.Guid()这样称呼它

没有。扩展方法允许调用静态方法就好像它们是实例方法。您正在尝试编写一个静态方法并允许调用它就好像它是一个无关类型的静态方法。

不支持 - 至少从 C# 8 开始不支持。

编写针对string 的真正扩展方法是完全可行的。例如:

public static class PointlessExtensions
{
    public static HasEvenLength(this string text) => (text.Length & 1) == 0;
}

称为:

bool result1 = "odd".HasEvenLength(); // False
bool result2 = "even".HasEvenLength(); // True

【讨论】:

  • 小补充:如果一个类派生另一个具有静态成员的类,您也可以通过派生类调用该静态成员。
  • “无意义的扩展”。我想我会用这个名字。
  • 我明白了。非常感谢您的关注和支持。
猜你喜欢
  • 2011-11-07
  • 2018-11-30
  • 1970-01-01
  • 2017-03-08
  • 2011-09-23
  • 2010-09-20
  • 2012-12-01
  • 2015-06-11
相关资源
最近更新 更多