Code Contracts: How do I supply a contract class for a generic interface?
.net, code-contracts, generics, interface
Solution
As mentioned by other comments in this question, you should remove the generic type identifier from your attribute usage as it can not be resolved at compile time:
[ContractClass(typeof(IRandomWriteAccessibleContract<>))]
Problem
I'd like to specify a contract for this generic interface, using Code Contracts: ``` interface IRandomWriteAccessible<T> { T this[uint index] { set; } uint Length { get; } } ``` The documentation says to use the `ContractClass` attribute when specifying a contract for an interface. However, the compiler will complain about this: ``` [ContractClass(typeof(IRandomWriteAccessibleContract<T>))] // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ <-- compiler error interface IRandomWriteAccessible<T> { … } [ContractClassFor(typeof(IRandomWriteAccessible<T>))] // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ <-- compiler error sealed class IRandomWriteAccessibleContract<T> : IRandomWriteAccessible<T> { … } ``` It seems that type parameters cannot be used with attributes. How do I write a contract for my generic interface? Or is this not possible with Code Contracts?