title: Why does SignalR use IList in its contracts and everywhere in its internals instead of IEnumerable?
body: <p>I'm sending messages to individual users depending on their roles, to accomplish that I have the following piece of code:</p>
  
  <pre><code>public static void Add(Guid userId, IEnumerable&lt;SnapshotItem&gt; snapshot)
  {
      var hub = GlobalHost.ConnectionManager.GetHubContext&lt;FeedbackHub&gt;();
  
      var items = ApplicationDbContext.Instance.InsertSnapshot(userId, Guid.NewGuid(), snapshot);
  
      foreach (var sendOperation in ConnectedUsers.Instance.EnumerateSendOperations(items))
      {
          hub.Clients.Users(sendOperation.Groups.SelectMany(x =&gt; x.Users).Select(x =&gt; x.Id).ToList()).OnDataFeedback(sendOperation.Items);
      }
  }
  </code></pre>
  
  <p>I'm not sure why do I have to invoke <code>.ToList()</code> each time I need to send something, my backing store is <code>HashSet&lt;String&gt;</code> and I want SignalR to work with that type of store instead of converting it to <code>List</code> each time since it would obviously consume processing power and memory.</p>
  
  <p>Since in the backstage SignalR is doing simple iteration over the argument users or connectionIds, wouldn't it be more wise to use <code>IEnumerable</code> instead of <code>IList</code>, I've looked into the SignalR sources, shouldn't be to hard to achieve? Is there a particular reason for using the <code>IList</code>?</p>
  
  <hr>
  
  <p><strong>Edit</strong></p>
  
  <p>Created an issue on SignalR github page, will have to wait for one of the actual devs in order to clear things out...</p>