是否可以为除 C# 中的原语之外的所有 类 创建扩展方法?
Is it possible to create an extension method for all classes excluding primitives in C#?
我想创建一个仅适用于 类 的扩展方法。
我可以为类型 object
编写扩展方法,如下所示:
public static void SomeMethod(this object obj)
{
// some code
}
然而,这也适用于原语,我想禁止做这样的事情:
int number = 2;
number.SomeMethod();
有什么办法可以做到这一点吗?如果可能的话?
不要这样做。如果你有一个方法你想调用各种各样的对象,然后将它集中在某个地方的函数中。这样,在您 10 年后出现的一些可怜的程序员就不会想知道那个奇怪的方法在哪里。
我认为你需要这样的东西,但我不建议你这样做,除非它不是为了序列化或类似的东西。
public static void SomeMethod<T>(this T obj) where T : class
{
}
你将在这里对抗拳击行为...
本质上你限制了你的类型,它必须是一个对象,但是 C# 加了一些糖说,那是一个原始的,我可以为你把它装进一个对象中,也把它当作一个对象来对待!
如果您有某个级别的子类可以作为目标,那可能会停止您所追求的行为(例如不要针对所有对象,但可能是 IObservable、IEnumerable 等对象)
另一种防御性编码的方法是在您的方法上添加显式类型检查和异常抛出
if (myobject.GetTypeCode != TypeCode.Object) { throw new ArgumentException() }
我想创建一个仅适用于 类 的扩展方法。
我可以为类型 object
编写扩展方法,如下所示:
public static void SomeMethod(this object obj)
{
// some code
}
然而,这也适用于原语,我想禁止做这样的事情:
int number = 2;
number.SomeMethod();
有什么办法可以做到这一点吗?如果可能的话?
不要这样做。如果你有一个方法你想调用各种各样的对象,然后将它集中在某个地方的函数中。这样,在您 10 年后出现的一些可怜的程序员就不会想知道那个奇怪的方法在哪里。
我认为你需要这样的东西,但我不建议你这样做,除非它不是为了序列化或类似的东西。
public static void SomeMethod<T>(this T obj) where T : class
{
}
你将在这里对抗拳击行为...
本质上你限制了你的类型,它必须是一个对象,但是 C# 加了一些糖说,那是一个原始的,我可以为你把它装进一个对象中,也把它当作一个对象来对待!
如果您有某个级别的子类可以作为目标,那可能会停止您所追求的行为(例如不要针对所有对象,但可能是 IObservable、IEnumerable 等对象)
另一种防御性编码的方法是在您的方法上添加显式类型检查和异常抛出
if (myobject.GetTypeCode != TypeCode.Object) { throw new ArgumentException() }