C#创建扩展方法

C#创建扩展方法,c#,char,C#,Char,您好,我想为Char类创建一个扩展方法,它作为Char.IsDigit()方法工作(当然,它会识别不同类型的字符)。 我写道: namespace CharExtensions { public static class CompilerCharExtension { public static Boolean IsAddOp(this Char c) { return c.Equals('+') || c.Equals('

您好,我想为
Char
类创建一个扩展方法,它作为
Char.IsDigit()
方法工作(当然,它会识别不同类型的字符)。 我写道:

namespace CharExtensions
{
    public static class CompilerCharExtension
    {
        public static Boolean IsAddOp(this Char c)
        {
            return c.Equals('+') || c.Equals('-');
        }
    }
}
这很好,但这并不完全是我的意思。 此扩展应按以下方式使用:

using CharExtensions;
char x:
...
if(x.IsAddOp())
    Console.WriteLine("Add op found");
我想说的是:

using CharExtensions;
char x;
...
if(Char.IsAddOp(x))
    Console.WriteLine("Add op found");

感谢所有能帮助我的人。

你不能这样做,因为扩展方法总是需要对象的实例。 看

扩展方法定义为静态方法,但使用实例方法语法调用


您不能这样做,因为扩展方法总是需要对象的实例。 看

扩展方法定义为静态方法,但使用实例方法语法调用


您的问题提到要触发一个类的静态方法。实际上,您希望为
Char
类定义一个静态方法,而不是向
Char
实例添加扩展。要定义静态方法,必须访问原始类

现在您可以使用
StaticMethod
作为:

SomeClass.StaticMethod();  

然后,您必须访问Microsoft.net framework代码才能将
IsAddOp(x)
方法添加到
Char
类。实际上,你用你所说的扩展来定义扩展的方法是错误的。。您没有尝试定义
扩展
方法..您尝试定义
静态
方法。

您的问题提到启动类的静态方法。实际上,您希望为
Char
类定义一个静态方法,而不是向
Char
实例添加扩展。要定义静态方法,必须访问原始类

现在您可以使用
StaticMethod
作为:

SomeClass.StaticMethod();  

然后,您必须访问Microsoft.net framework代码才能将
IsAddOp(x)
方法添加到
Char
类。实际上,你用你所说的扩展来定义扩展的方法是错误的。。您不尝试定义
扩展
方法。您尝试定义
静态
方法。

您不能这样做,如果可以的话,这将是非常糟糕的做法。你为什么要这么做?只需创建一个普通方法,并像这样调用它:
IsAddOp(x)
@DavidG只需创建一个普通方法是好的,但如果可以定义扩展方法,那么最好将其用于developer@combo_ci对
char
的扩展以什么方式更好?@DavidG不,我说使用扩展方法比使用普通方法更好,但问题是要向.Net基类添加一个我认为不是的函数possible@combo_ci实际上,向基本框架类型添加扩展也被认为是非常糟糕的形式。你不能这样做,如果可以的话,那将是非常糟糕的做法。你为什么要这么做?只需创建一个普通方法,并像这样调用它:
IsAddOp(x)
@DavidG只需创建一个普通方法是好的,但如果可以定义扩展方法,那么最好将其用于developer@combo_ci对
char
的扩展以什么方式更好?@DavidG不,我说使用扩展方法比使用普通方法更好,但问题是要向.Net基类添加一个我认为不是的函数possible@combo_ci实际上,向基本框架类型添加扩展也被认为是非常糟糕的形式。从技术上讲,它们不需要实例。他们只需要一个正确类型的变量;无论该值是否为
null
都与能否调用该方法无关(尽管大多数扩展方法都需要它)。@Joey从技术上讲,您也不需要变量。您只需要一个具有正确编译时类型的表达式。例如
((IEnumerable)null).First()从技术上讲,它们不需要实例。他们只需要一个正确类型的变量;无论该值是否为
null
都与能否调用该方法无关(尽管大多数扩展方法都需要它)。@Joey从技术上讲,您也不需要变量。您只需要一个具有正确编译时类型的表达式。例如
((IEnumerable)null).First()