C# 在LINQ中忽略参数的正确方法是什么?
我有以下代码:C# 在LINQ中忽略参数的正确方法是什么?,c#,linq,C#,Linq,我有以下代码: foreach (var b in userNames.Select(a => new User())) { ... } 这工作得相当好,因为它给了我所有“新鲜”的用户对象,但是代码分析抱怨我不应该创建未使用的局部变量,所以我的问题是,有没有一种方法可以忽略参数(类似于Haskell中的“\”) PS:我的例子不是最好的。对此我很抱歉 谢谢 更新1 我得到了以下代码分析错误: [System.Diagno
foreach (var b in userNames.Select(a => new User()))
{
...
}
这工作得相当好,因为它给了我所有“新鲜”的用户对象,但是代码分析抱怨我不应该创建未使用的局部变量,所以我的问题是,有没有一种方法可以忽略参数(类似于Haskell中的“\”)
PS:我的例子不是最好的。对此我很抱歉
谢谢
更新1
我得到了以下代码分析错误:
[System.Diagnostics.CodeAnalysis.SuppressMessage(“Microsoft.Performance”、“CA1804:RemoveUnusedLocals”、MessageId=“a”)、System.Diagnostics.CodeAnalysis.SuppressMessage(“Microsoft.Performance”、“CA1804:RemoveUnusedLocals”、MessageId=“b”)]
Select
对调用它的集合执行投影,对每个元素执行指定的操作,并在另一个集合中返回转换后的结果。如果不需要对lambda元素执行任何操作,那么最好直接创建一个User
对象数组
回答您的编辑,正如我上面所说的,您可以简单地执行以下操作:
var NewColl = new User[userNames.Length];
至于初始化,您可以这样做:
Enumerable.Repeat<User>(new User(), userNames.Length);
Enumerable.Repeat(new User(),userNames.Length);
Select
对调用它的集合执行投影,对每个元素执行指定操作,并在另一个集合中返回转换后的结果。如果不需要对lambda元素执行任何操作,那么最好直接创建一个User
对象数组
回答您的编辑,正如我上面所说的,您可以简单地执行以下操作:
var NewColl = new User[userNames.Length];
至于初始化,您可以这样做:
Enumerable.Repeat<User>(new User(), userNames.Length);
Enumerable.Repeat(new User(),userNames.Length);
在C
中是一个完全有效的变量名。这么写
foreach(var b in userNames.Select(_ => new User()))
{
}
是完全有效的代码。它是否接受此类情况取决于您的分析规则
但是,您的代码确实非常可疑:您正在将一组用户名映射到一组用户,但没有指定两者之间的直接关系:可能您想编写如下内容:
foreach(var b in userNames.Select(username => new User(username)))
在C
中是一个完全有效的变量名。这么写
foreach(var b in userNames.Select(_ => new User()))
{
}
是完全有效的代码。它是否接受此类情况取决于您的分析规则
但是,您的代码确实非常可疑:您正在将一组用户名映射到一组用户,但没有指定两者之间的直接关系:可能您想编写如下内容:
foreach(var b in userNames.Select(username => new User(username)))
我相信有一个有效的例子,你会想忽略像这样的论点,但这似乎不是其中之一。如果您正在为N个用户名创建NUser
对象,那么您确定要将它们耦合在一起吗
foreach (var b in userNames.Select(a => new { name = a, user = new User() }))
{
...
}
这样就不会有任何未使用的参数
但问题仍然是,你为什么不这么做:
foreach (var name in userNames)
{
var user = new User();
// ...
}
据我所知,您在这里使用.Select()
毫无意义。我确信有一种有效的情况,您可能希望忽略这样的参数,但这似乎不是其中之一。如果您正在为N个用户名创建NUser
对象,那么您确定要将它们耦合在一起吗
foreach (var b in userNames.Select(a => new { name = a, user = new User() }))
{
...
}
这样就不会有任何未使用的参数
但问题仍然是,你为什么不这么做:
foreach (var name in userNames)
{
var user = new User();
// ...
}
据我所知,您使用
.Select()
在这里没有任何意义。如果您关心数量,需要linq,请将其改写为
foreach(var user in Enumerable.Repeat(()=>new User(),Usernames.Count).Select(x=>x()))
{
}
但是,根据您的看法,它可能看起来很难看。如果数量是您关心的问题,并且需要linq,请将其改写为
foreach(var user in Enumerable.Repeat(()=>new User(),Usernames.Count).Select(x=>x()))
{
}
但是,根据您对它的看法,它可能看起来很难看。要创建给定大小的对象集合,只需使用原始集合的长度即可
var newColletion = Enumerable.Repeat(false, input.Length)
.Select(_ => new User());
但也许最好是你自己的助手方法
static class MyEnumerable {
IEnumberable<T> Repeat<T>(Func<T> generator, int count) {
for (var i = 0; i < count; ++i) {
yield return generator();
}
}
}
要创建给定大小的对象集合,只需使用原始集合的长度即可
var newColletion = Enumerable.Repeat(false, input.Length)
.Select(_ => new User());
但也许最好是你自己的助手方法
static class MyEnumerable {
IEnumberable<T> Repeat<T>(Func<T> generator, int count) {
for (var i = 0; i < count; ++i) {
yield return generator();
}
}
}
问题是你为什么要这么做?你为什么要这么做?将
用户名的每个元素投影到新用户()
对象。然后通过这个序列迭代这些对象。你为什么要这样做?你的例子可能不是最好的,但我可以想象,有时有必要忽略这个论点。没什么大不了的,问题是你为什么要这么做?你为什么要这么做?将用户名的每个元素投影到新用户()
对象。然后通过这个序列迭代这些对象。你为什么要这样做?你的例子可能不是最好的,但我可以想象,有时有必要忽略这个论点。没什么大不了的。你如何直接创建一个初始化的User
对象数组,其长度与userNames
枚举长度相同?@dotNET,它不会创建一个初始化的User
对象数组,它会创建一个空数组。@dotNET创建一组重复多次的相同对象,正如CodeCaster回答中的评论所述。您如何直接创建一个初始化的用户
对象数组,其长度与用户名
枚举相同?@dotNET,这不会创建一个初始化的User
对象数组-这会创建一个空数组。@dotNET会创建一组重复多次的同一对象,正如CodeCaster答案中的注释所述。这真是左耳被右脚脚趾划伤了!它隐藏了初始代码所暗示的任何意图。这相当于用右脚的脚趾划伤左耳!它隐藏了初始代码的意图。这是一个非常复杂的方法。我接受它,只是向他展示