我怎么知道某些扩展方法是否"改变"了对象?

2 .net c# extension-methods object

如果这是一个糟糕的措辞选择,请随意编辑标题中的'mutate'.

我的问题是,相对而言,简单.

请看以下示例:

myCollection.OrderBy(o => o);
Run Code Online (Sandbox Code Playgroud)

我如何知道是否需要OrderBy订购myCollection或是否需要转让(以下):

myCollection = myCollection.OrderBy(o => o);
Run Code Online (Sandbox Code Playgroud)

是否需要构建它并检查每次遇到我不熟悉的扩展时?

请注意:我不会问这是否会影响myCollection,我已经知道了之前几百次使用它的答案,我问我怎么知道.

Pat*_*man 5

你无法从签名中分辨出来.

您可以做的最好的事情是调查实际代码,例如通过查看.NET Reference Source.您可以做的另一件事是检查返回类型.如果它与它被调用的那个相同,它可能不会改变它,它很可能返回一个新实例.它是一个void,然后它可能会改变内部的东西.

例如,对于您的具体情况,OrderBy:不.看到这里.它'只是'返回一个new OrderedEnumerable.