相关疑难解决方法(0)

C#foreach循环 - 订单*稳定*保证?

假设我有一个给定的集合.在没有以任何方式更改集合的情况下,我使用foreach循环其内容两次.除了宇宙射线,什么不是,绝对保证顺序在两个循环中都是一致的?

或者,给定一个HashSet<string>包含许多元素的元素,可能导致以下注释行的输出不相等:

{
    var mySet = new HashSet<string>();
    // Some code which populates the HashSet<string>

    // Output1
    printContents(mySet);

    // Output2
    printContents(mySet);
}

public void printContents(HashSet<string> set) {
    foreach(var element in set) {
         Console.WriteLine(element);
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我能得到一个解释导致实现不符合上述标准的原因的一般性答案将会有所帮助.具体而言,虽然,我很感兴趣Dictionary,List和数组.

c# collections foreach

13
推荐指数
2
解决办法
1万
查看次数

为什么List <T>没有实现IOrderedEnumerable <T>?

我想使用有序的枚举,并使用接口作为返回类型而不是具体类型.我需要返回一组有序的对象.但是,当使用IList<T>实现时,我无法返回IOrderedEnumerable<T>,因为IList<T>不继承IOrderedEnumerable<T>.

在下面的示例中,我有一个视图模型,其中包含一个系列的存储库,实现为List<T>一系列对象,因为它们位于一个List<T>有序的对象中.我是一个访问器方法,我想返回一个系列的过滤集,其中只返回特定类型的系列对象,同时保持过滤元素之间的原始顺序.

/// <summary>
/// Represents the view model for this module.
/// </summary>
public class ViewModel : AbstractViewModel
{
    /// <summary>
    /// Gets the series repository.
    /// </summary>
    /// <value>The series repository.</value>
    public IList<ISeries> SeriesRepository { get; private set; }

    //...
}

//8<-----------------------------

    /// <summary>
    /// Gets the series of the specified type.
    /// </summary>
    public IOrderedEnumerable<T> Series<T>() where T : ISeries
    { …
Run Code Online (Sandbox Code Playgroud)

c# ienumerable ilist types where

11
推荐指数
2
解决办法
8940
查看次数

如何将任务结果传递给不使用延续的其他任务

我在Func<Task>类型中定义了可变数量的任务,因此我可以定义任务但不能让它们自动启动。比如说:

Func<Task> task1Func = () => DoTask1Async();
Run Code Online (Sandbox Code Playgroud)

以这种方式定义的一些任务返回值。我需要一种方法将此类任务的结果“传递”给以相同方式定义的后续任务的参数。所以,我想写:

Func<Task> task2Func = () => DoTask2Async(task1Func.Invoke().Result));
Run Code Online (Sandbox Code Playgroud)

这样做的问题是它task1Func.Invoke()再次启动 task1 任务,这是不好的。

我无法将输入重新定义为链式延续,例如:

Func<Task> funcTasks = () => DoTask1Async().ContinueWith(t => DoTask2Async(t.Result));
Run Code Online (Sandbox Code Playgroud)

因为我需要在代码中知道链中每个任务(即 DoTask1Async / DoTask2Async)完成以运行其他代码的点。另一个问题是我不知道如何计算“链”中涉及多少任务。

我无法在任务完成时存储任务结果,因为需要像task1Func和那样以声明方式定义任务task2Func

任务按定义的顺序处理,每个任务在处理下一个任务之前完成。任务的结果仅用于后续任务。

编辑

为了响应使用task1Func.Invoke().Result这里的可运行代码的请求。创建一个新的 WPF 项目并向默认网格添加一个按钮。然后清除 MainWindow.xaml.cs 文件并粘贴以下内容。这是最接近我真实项目的代码,同时删除了所有与问题无关的东西。

using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using System.Windows;

namespace WpfApplication2
{

/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    } …
Run Code Online (Sandbox Code Playgroud)

c# asynchronous task task-parallel-library async-await

5
推荐指数
1
解决办法
123
查看次数

IEnumerable到IList之间的转换(Dapper返回结果)

有方法签名UserManager(ASP .NET Identity Core默认实现):

public Task<IList<string>> GetRolesAsync(User user) {
    const string query = @"
                select r.[Name]
                  from [UserRoles] ur
             left join [Roles] r on r.RoleId = ur.RoleId
                 where ur.UserId = @userId;
    ";

    return Task.Factory.StartNew(() => {
        using (SqlConnection connection = new SqlConnection(_connectionString))
            return connection.Query<string>(query, new { userId = user.UserId });
    });
}
Run Code Online (Sandbox Code Playgroud)

但不幸的是Dapper.Query<T>返回IEnumerable<T>.

是否有可能返回IList<T>或我必须自己进行转换?

.net c# asp.net-mvc dapper

4
推荐指数
2
解决办法
3978
查看次数

LINQ First/FirstOrDefault会迭代整个可枚举的吗?

语境:

我有一个numbers类型的变量IEnumerable<int>.
我想检查数字是否按升序排列.

算法

所以我得到了存储它的第一个元素,prev并希望检查下一个后续数字.

// numbers can contain "10, 20, 60, 50"
IEnumerable<int> numbers = TraverseInOrder(root);
int prev = numbers.FirstOrDefault();
foreach (var curr in numbers.Skip(1))
{
    if (curr < prev) return false;
    prev = curr;
}
return true;
Run Code Online (Sandbox Code Playgroud)

我设置的值prev使用numbers.FirstOrDefault(),也跳过一个元素(numbers.Skip(1)),在foreach从明年元素开始.

所以对于以下代码,

numbers.FirstOrDefault()
numbers.Skip(1)
Run Code Online (Sandbox Code Playgroud)

我列举了numbers两次O(2N)?意思FirstOrDefault迭代整个列表?
- 或 -
它仍然是O(N)?(O(1)FirstOrDefault+ O(N)的常数时间Skip(1))

c# linq algorithm big-o

1
推荐指数
1
解决办法
991
查看次数

如何知道哪个布尔值为真

根据这个线程优雅地确定是否有多个布尔值是"真"

使用这部分代码......

public bool ExceedsThreshold(int threshold, IEnumerable<bool> bools)
{
   int trueCnt = 0;
   foreach(bool b in bools)
      if (b && (++trueCnt > threshold)) 
          ***//here i need to know which of b is the true***
          return true;
   return false;          
} 
Run Code Online (Sandbox Code Playgroud)

我想知道哪个bools变量是真的?

c# visual-studio-2010

-1
推荐指数
1
解决办法
215
查看次数