是否可以为C#中的基元创建所有类的扩展方法?

时间:2018-01-24 15:24:36

标签: c# extension-methods

我想创建一个仅适用于类的扩展方法。 我可以为类型object编写扩展方法,如下所示:

public static void SomeMethod(this object obj)
{
    // some code
}

然而,这也适用于原语,我想禁用这样的事情:

int number = 2;
number.SomeMethod();

如果可能的话,我怎么能这样做呢?

3 个答案:

答案 0 :(得分:2)

我认为你需要这样的东西,但我不建议你这样做只是因为它不是为了序列化或类似的东西。

public static void SomeMethod<T>(this T obj) where T : class
{

}

答案 1 :(得分:0)

你将在这里打击拳击行为......

基本上你限制你的类型它必须是一个对象,但C#添加了一些糖,并说,这是一个原始的,我可以把它装入一个对象,并把它当作一个对象!

如果您有一定级别的子类可以定位,那么可能会停止您所追求的行为(如不针对所有对象,但可能是IObservable,IEnumerable等等)。

防御性编码的另一种方法是在方法上添加显式类型检查和异常抛出

 if (myobject.GetTypeCode != TypeCode.Object) { throw new ArgumentException() }

答案 2 :(得分:-2)

不要这样做。如果你有一个方法想要调用各种各样的对象,那么将它集中在一个函数中。那样一些差劲的程序员在你之后10年出现就不会想知道那个奇怪的方法在哪里。