我的代码充斥着
someInt=0;
我不断地“重置”我的整数。
是否可以实现将整数设置为0的扩展方法?
这样的事情:
public static void Reset(this int num) =>num=0;
预期用途是:
someInt.Reset;
但是这不起作用,因为整数是值类型。
答案 0 :(得分:2)
您可以使用结构作为结构是值类型,即
public struct IntegerHolder
{
public int val;
public reset() {
myInt = 0
}
}
public void main()
{
IntegerHolder MyInteger
MyInteger.val = 5 //Set the val to 5
MyInteger.reset() //Reset it back to 0
}
但使用int = 0 可能效率更高。只提供一个有用的解决方案
答案 1 :(得分:1)
请参阅Impossible to use ref and out for first ("this") parameter in Extension methods? - 您需要使用ref
或out
作为参数的选项,但它们与this
修饰符互斥
我不认为你有一个好主意 - 因为代码foo = 0;
是简洁的,并且很明显它的作用 - 将它包装在扩展方法中是没有意义的,因为它没有解决任何问题问题,它增加了复杂性,并增加了错误的可能性(如果Reset
的一个用户需要重置为1
而不是0
,并盲目地更改Reset
的定义,那该怎么办? ?它会破坏你的其余代码。
不要只是因为它在那里使用语言功能 - 一个优秀的程序员知道何时不使用语言功能。
如果您确实想要添加这样的功能,请使用类似T4的内容或为Roslyn制作模板扩展名。