Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在LINQ中忽略参数的正确方法是什么?_C#_Linq - Fatal编程技术网

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个用户名创建N
User
对象,那么您确定要将它们耦合在一起吗

foreach (var b in userNames.Select(a => new { name = a, user = new User() }))
{
    ...
}
这样就不会有任何未使用的参数

但问题仍然是,你为什么不这么做:

foreach (var name in userNames)
{
    var user = new User();
    // ...
}
据我所知,您在这里使用
.Select()
毫无意义。

我确信有一种有效的情况,您可能希望忽略这样的参数,但这似乎不是其中之一。如果您正在为N个用户名创建N
User
对象,那么您确定要将它们耦合在一起吗

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答案中的注释所述。这真是左耳被右脚脚趾划伤了!它隐藏了初始代码所暗示的任何意图。这相当于用右脚的脚趾划伤左耳!它隐藏了初始代码的意图。这是一个非常复杂的方法。我接受它,只是向他展示