Visual Studio 说我的变量在私有方法中没有用 [关闭]
Posted
技术标签:
【中文标题】Visual Studio 说我的变量在私有方法中没有用 [关闭]【英文标题】:Visual Studio said my variables are useless in a private method [closed] 【发布时间】:2021-08-11 02:51:12 【问题描述】:我有一个简单的场景,我开始多次重复相同的代码,所以我决定将它移动到一个私有方法中,这取决于它正在被编辑的 if/else,我下面列出的变量可能会覆盖它的值,即完全没问题:
ProductResponse identificationResults = new ProductResponse(); // I understand this assignment gets overridden in private method below but that is goal
long? productIdentificationRecordId = null; // I understand this assignment gets overridden in private method below but that is goal
我在代码中的几个地方调用我的方法,这就是我创建私有方法以避免同一文件中的代码重复的原因:
await SetProductStatusAndPerformDbActions(productCompany, userId );
private async Task SetProductStatusAndPerformDbActions(Company productCompany, long userId, ProductType productType, ProductStatus status, long? productIdentificationRecordId, ProductResponse identificationResults, CancellationToken cancellationToken)
status = GetCompanyProductStatus(productCompany.Id, identificationResults);
productIdentificationRecordId = await PerformDbAction(status, productType, userId, cancellationToken); // underlined this code
identificationResults = await IdentifyCompanyProduct(productCompany, cancellationToken); // underlined this code
Visual Studio 说“删除这个对局部变量的无用赋值 productIdentificationRecordId'
Visual Studio 说“删除这个对局部变量的无用赋值 鉴定结果
我知道这个分配在下面的私有方法中被覆盖,但这是私有方法的点,因为我想使用例如 productIdentificationRecordId
和它的新值,因为在我调用这个私有方法之后,私有方法的目标是修改它就是这样。。
我没有使用可能导致此警告的变量,所以我不知道该怎么做。
如何写才能避免这种情况?
编辑:
添加了私有方法的截图,变量未使用变灰:
【问题讨论】:
你能把它归结为minimal reproducible example吗?我担心我们在这里看不到隐藏的细微差别。 你能指出 Visual Studio 所说的哪些任务是不必要的吗? Visual Studio 是在方法外的第一个赋值还是方法内的赋值上出现错误? @LasseV.Karlsen 它与私有方法productIdentificationRecordId
和 identificationResults
中的这两个变量有关。阅读下面的代码示例 cmets。我会在一分钟内添加一个屏幕截图,这样你就可以看到我在说什么。
不清楚你在问什么。有问题的变量是方法的参数。您已经使用这些参数隐藏了任何同名字段。参数的值以后永远不会使用,因此为它们分配任何东西实际上是无用的。为什么要包含这些参数?您的意思是让它们通过引用传递吗? IE。 out
?你真的需要这些参数吗?你能省略它们并实现你想要的吗?请修正您的问题,以便更清楚。
【参考方案1】:
由于这些参数不是通过引用传递的,因此将它们设置为任何值只会更改辅助方法本地参数变量的值:它不会影响传递给这些参数的值。
由于您没有使用在方法中为这些参数分配的新值,Visual Studio 足够聪明,可以识别为它们设置值没有任何效果。它会警告你,这很好,因为在这种情况下你可能会认为你的代码正在做一些它并没有真正做的事情。
【讨论】:
解释得很好。这里有什么解决方案可以通过设置值来传递变量?感谢勇士 最好的模式通常是让辅助方法返回一个你希望有“输出”的值,并且只使用你传入的参数作为“输入”。因此,您需要将方法从返回Task
更改为返回 Task<...>
,其中 ...
可以是包含状态、productIdentificationRecordId 和 IdentificationResults 的元组、类或记录。
(显然不要将这些值作为参数传递)以上是关于Visual Studio 说我的变量在私有方法中没有用 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
为啥 Visual Studio Code 想要访问我的私有 SSH 密钥?
从工厂方法和静态变量分配中了解返回值优化 (Visual Studio)
急需!!!visual studio.net 2005怎么 设置环境变量?