public static void Main()
var state = new MyState();
state = DoSomething(state);
public static T DoSomething<T>(T state) where T : IHasMyString, IHasMyInt
var s = state.GetMyString();
var i = state.GetMyInt();
public interface IHasMyInt
public interface IHasMyString
public interface IHasMyDouble
public class MyState : IHasMyInt, IHasMyString
public int MyInt {get; set; }
public string MyString {get; set; }
public double MyDouble {get; set; }
public string GetMyString ()
public double GetMyDouble ()