假设我有一个给定的集合.在没有以任何方式更改集合的情况下,我使用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);
    }
}
如果我能得到一个解释导致实现不符合上述标准的原因的一般性答案将会有所帮助.具体而言,虽然,我很感兴趣Dictionary,List和数组.
我想使用有序的枚举,并使用接口作为返回类型而不是具体类型.我需要返回一组有序的对象.但是,当使用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
    { …我在Func<Task>类型中定义了可变数量的任务,因此我可以定义任务但不能让它们自动启动。比如说:
Func<Task> task1Func = () => DoTask1Async();
以这种方式定义的一些任务返回值。我需要一种方法将此类任务的结果“传递”给以相同方式定义的后续任务的参数。所以,我想写:
Func<Task> task2Func = () => DoTask2Async(task1Func.Invoke().Result));
这样做的问题是它task1Func.Invoke()再次启动 task1 任务,这是不好的。
我无法将输入重新定义为链式延续,例如:
Func<Task> funcTasks = () => DoTask1Async().ContinueWith(t => DoTask2Async(t.Result));
因为我需要在代码中知道链中每个任务(即 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();
    } …有方法签名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 });
    });
}
但不幸的是Dapper.Query<T>返回IEnumerable<T>.
是否有可能返回IList<T>或我必须自己进行转换?
语境:
我有一个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;
问 
我设置的值prev使用numbers.FirstOrDefault(),也跳过一个元素(numbers.Skip(1)),在foreach从明年元素开始.
所以对于以下代码,
numbers.FirstOrDefault()
numbers.Skip(1)
我列举了numbers两次O(2N)?意思FirstOrDefault迭代整个列表?
- 或 - 
它仍然是O(N)?(O(1)FirstOrDefault+ O(N)的常数时间Skip(1))
根据这个线程优雅地确定是否有多个布尔值是"真"
使用这部分代码......
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;          
} 
我想知道哪个bools变量是真的?
c# ×6
.net ×1
algorithm ×1
asp.net-mvc ×1
async-await ×1
asynchronous ×1
big-o ×1
collections ×1
dapper ×1
foreach ×1
ienumerable ×1
ilist ×1
linq ×1
task ×1
types ×1
where ×1