もう一つの回答が外してるかもしれないので Data
を生かして別解を。
まず前提としてプロジェクトは二つあります。
ソリューションのディレクトリを仮に C:\Solution とすると
C:\Solution\WindowsFormsApp1 に Windows Forms アプリである WindowsFormsApp1.exe を作るプロジェクト
C:\Solution\ClassLibrary1 にクラスライブラリである ClassLibrary1.dll を作るプロジェクト
ClassLibrary には次のソースが含まれています。
Data.cs
C#
1namespace ClassLibrary1
2{
3 public class Data
4 {
5 public Data(string name)
6 {
7 Name = name;
8 }
9
10 public string Name { get; set; }
11 }
12}
WindowsFormsApp1 には次のソースが含まれています。
TextTemplate1.tt
C#
1<#@ template debug="false" hostspecific="false" language="C#" #>
2<#@ assembly name="System.Core" #>
3<#@ assembly name="$(SolutionDir)\ClassLibrary1\bin\Debug\ClassLibrary1.dll" #>
4<#@ import namespace="System.Linq" #>
5<#@ import namespace="System.Text" #>
6<#@ import namespace="System.Collections.Generic" #>
7<#@ import namespace="ClassLibrary1" #>
8<#@ output extension=".cs" #>
9
10<# var _data = new List<Data>() { new Data("Alpha"), new Data("Bravo"), new Data("Charley") }; #>
11
12using System;
13using ClassLibarry1;
14
15namespace WindowsFormsApp1
16{
17 public class Class1
18 {
19 private void SetProperties(CustomoerViewModel source)
20 {
21 if (source == null) return;
22<# foreach(Data x in _data) #>
23<# { #>
24 <#= x.Name #> = source.<#= x.Name #>;
25<# } #>
26 PostCode = source.PostCode;
27 }
28 }
29}
この状態で TextTemplate1.tt を保存すると、次のソースが作られます。
C#
1using System;
2using ClassLibarry1;
3
4namespace WindowsFormsApp1
5{
6 public class Class1
7 {
8 private void SetProperties(CustomoerViewModel source)
9 {
10 if (source == null) return;
11 Alpha = source.Alpha;
12 Bravo = source.Bravo;
13 Charley = source.Charley;
14 PostCode = source.PostCode;
15 }
16 }
17}
これでどうでしょうか?