Fody
This is an add-in forFacilitates adding constraints for Enum and Delegate to types and methods.
Usage
See also Fody usage.
NuGet installation
Install the ExtraConstraints.Fody NuGet package and update the Fody NuGet package:
PM> Install-Package ExtraConstraints.Fody
PM> Update-Package Fody
The Update-Package Fody
is required since NuGet always defaults to the oldest, and most buggy, version of any dependency.
Add to FodyWeavers.xml
Add <ExtraConstraints/>
to FodyWeavers.xml
<?xml version="1.0" encoding="utf-8" ?>
<Weavers>
<ExtraConstraints/>
</Weavers>
Your Code
public class Sample
{
public void MethodWithDelegateConstraint<[DelegateConstraint] T> () {...}
public void MethodWithTypeDelegateConstraint<[DelegateConstraint(typeof(Func<int>))] T> () {...}
public void MethodWithEnumConstraint<[EnumConstraint] T>() {...}
public void MethodWithTypeEnumConstraint<[EnumConstraint(typeof(ConsoleColor))] T>() {...}
}
What gets compiled
public class Sample
{
public void MethodWithDelegateConstraint<T>() where T: Delegate {...}
public void MethodWithTypeDelegateConstraint<T>() where T: Func<int> {...}
public void MethodWithEnumConstraint<T>() where T: struct, Enum {...}
public void MethodWithTypeEnumConstraint<T>() where T: struct, ConsoleColor {...}
}
Credit
Inspired by Jon Skeets blog post Generic constraints for enums and delegates.
Based mainly on code from Jb Evain's blog post Constraining generic constraints.
Icon
Straightjacket designed by Luis Prado from The Noun Project.