我想创建一个仅适用于类的扩展方法。
我可以为类型object
编写扩展方法,如下所示:
public static void SomeMethod(this object obj)
{
// some code
}
然而,这也适用于原语,我想禁用这样的事情:
int number = 2;
number.SomeMethod();
如果可能的话,我怎么能这样做呢?
答案 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)