C# has no preprocessing and I don't want to define "struct, IComparable, IFormattable, IConvertible" for all interfaces, that need this constraint. What I need is something like:
Named constraint "IMyItemConstraint" for several generic interface where-clauses:
public interface IProperty2Enum<T>
    : IEnumerable<T>
    where T : IMyItemConstraint { } // <--- here
public interface IMyCollection2<T>
    : IEnumerable<T>, INotifyCollectionChanged, INotifyPropertyChanged 
    where T : IMyItemConstraint { } // <--- here
public interface IMyObservableCollection2<T>
    : IEnumerable<T>, INotifyCollectionChanged, INotifyPropertyChanged 
    where T : IMyItemConstraint { } // <--- here
I tried to define a name "IMyItemConstraint", but I get errors CS####:
public interface IMyItemConstraint 
    : struct, IComparable, IFormattable, IConvertible { } // CS1031: Type expected 
public interface IMyItemConstraint : where IMyItemConstraint
    : struct, IComparable, IFormattable, IConvertible { } // CS1031: Type expected 
public interface IMyItemConstraint<T> where T // This does not help:
    : struct, IComparable, IFormattable, IConvertible { }
Is it possible, to define a named constraint for generic interface where-clause for several interfaces (contracts)?
 
    