随意修改'变异'从标题来看,如果它的措辞选择不好。
我的问题是,相对而言,简单。
采用以下示例:
myCollection.OrderBy(o => o);
我如何知道OrderBy
是否会/不会订购myCollection
或是否需要转让(以下):
myCollection = myCollection.OrderBy(o => o);
是否需要构建它并在每次遇到我不熟悉的扩展程序时进行检查?
请注意:我不会问这是否会影响myCollection
,我已经知道了之前几百次使用它的答案,我问的是我怎么知道。
答案 0 :(得分:5)
你不能仅仅签名。
您可以做的最好的事情是调查实际代码,例如查看.NET Reference Source。您可以做的另一件事是检查返回类型。如果它与它被调用的那个相同,它可能不会改变它,它很可能返回一个新实例。它是void
,它可能会改变内部的东西。
例如,对于您的具体情况,OrderBy
:不。见here。它只是'返回new OrderedEnumerable
。
答案 1 :(得分:2)
一种方法是确定方法或其类是否标记为[Pure]。纯代码不会修改输入值。
答案 2 :(得分:2)
你可以像Steven Liekens所说的那样检查课堂装饰中的Pure属性。但在缺席的情况下,唯一可以确定的方法是:
试验:例如,获取该类的实例并对其进行序列化。使用该方法,然后序列化它。比较结果。可能每次都不准确。
逆向工程方法,希望您拥有源代码。如果你不这样做,你可以使用反射。如果方法有点复杂,这将需要一些判断,但这里的复杂性是主观的。
阅读文档并信任他们 - 如果文档存在。对于.NET Framework类型来说,这是明智的做法,否则就是信仰的运用。