For example, this macro generates the code for C# class properties (I actually prefer this to using automatic properties as I don't have to change the code later):
Sub CreateProperties()
Dim textSelection As EnvDTE.TextSelection
textSelection = CType(DTE.ActiveDocument.Selection(), EnvDTE.TextSelection)
Dim outputText As String
Dim regExpression As New Regex("\s*(static)*\s*(\S+)\s*([a-zA-Z0-9_]+)", RegexOptions.Compiled)
For Each line As String In textSelection.Text.Split(New Char() {vbNewLine})
Dim m As Match = regExpression.Match(line)
If m.Success Then
Dim staticModifier As String = m.Groups(1).Value
Dim propertyDataType As String = m.Groups(2).Value
Dim propertyName As String = m.Groups(3).Value.Substring(0, 1).ToLower() & m.Groups(3).Value.Remove(0, 1)
outputText &= String.Format("private {4}{0} _{1};{3}public {4}{0} {2}{3}{{{3}get{3}{{{3}return _{1};{3}}}{3}}}{3}{3}", _
propertyDataType, _
propertyName, _
propertyName.Substring(0, 1).ToUpper() & propertyName.Remove(0, 1), _
Environment.NewLine, _
IIf(staticModifier = "", "", staticModifier & " "))
Else
If Not Regex.IsMatch(line, "^\s*$") Then
MsgBox("Input mismatch")
Exit Sub
End If
End If
Next
textSelection.Insert(outputText, 0)
textSelection.SmartFormat()
End SubTo use this macro, you type the data type of the property and its name (you can also use the static modifier), like this:
int count string name string description static int globalCount
Then, you select the code and run the macro (most conveniently, using a keyboard shortcut), to get this code:
private int _count;
public int Count
{
get
{
return _count;
}
}
private string _name;
public string Name
{
get
{
return _name;
}
}
private string _description;
public string Description
{
get
{
return _description;
}
}
private static int _globalCount;
public static int GlobalCount
{
get
{
return _globalCount;
}
}This is only a very simple use of VS Macros to demonstrate how they can be used for code generation. They are very powerful and can do much more complex things. If you do a lot of coding, it's certainly worth the time to learn more about this very powerful, yet underused, feature of Visual Studio.
Happy coding!