title: How can I create temporary objects to pass around without explicitly creating a class?
body: <p>I frequently find myself having a need to create a class as a container for some data. It only gets used briefly yet I still have to create the class. Like this:</p>
  
  <pre><code>public class TempObject
  {
      public string LoggedInUsername { get; set; }
      public CustomObject SomeCustomObject { get; set; }
      public DateTime LastLoggedIn { get; set; }
  }
  
  
  public void DoSomething()
  {
      TempObject temp = new TempObject
      {
          LoggedInUsername = "test",
          SomeCustomObject = //blah blah blah,
          LastLoggedIn = DateTime.Now
      };
      DoSomethingElse(temp);
  }
  
  public void DoSomethingElse(TempObject temp)
  {
      // etc...
  }
  </code></pre>
  
  <p>Usually my temporary objects have a lot more properties, which is the reason I want to group them in the first place. I wish there was an easier way, such as with an anonymous type. The problem is, I don't know what to accept when I pass it to another method. The type is anonymous, so how am I supposed to accept it on the other side?</p>
  
  <pre><code>public void DoSomething()
  {
      var temp = new
      {
          LoggedInUsername = "test",
          SomeCustomObject = //blah blah,
          LastLoggedIn = DateTime.Now
      };
      // I have intellisense on the temp object as long as I'm in the scope of this method.
      DoSomethingElse(temp);
  }
  
  public void DoSomethingElse(????)
  {
      // Can't get my anonymous type here. And even if I could I doubt I would have intellisense.
  }
  </code></pre>
  
  <p>Is there a better way to create a temporary container for a bunch of different types, or do I need to define classes every time I need a temporary object to group things together?</p>
  
  <p>Thanks in advance.</p>