我想根据对象的类型生成一个名称。在我的系统,我有,使用泛型的名称生成器
class Employee {}
Class ContractEmp:Employee{}
class Manager:Employee{}
我想生成的名字看起来像ContractEmp1其中1将来自增量。我正在尝试使用泛型。
任何帮助
谢谢
我想根据对象的类型生成一个名称。在我的系统,我有,使用泛型的名称生成器
class Employee {}
Class ContractEmp:Employee{}
class Manager:Employee{}
我想生成的名字看起来像ContractEmp1其中1将来自增量。我正在尝试使用泛型。
任何帮助
谢谢
有了你可以做这样的事情的扩展方法:
public static class NameExtension
{
private static Dictionary<string, int> counters = new Dictionary<string, int>();
public static string MakeUpName<T>(this T @object)
{
var t = typeof(T);
if (! counters.ContainsKey(t.FullName))
counters[t.FullName] = 0;
return t.Name + counters[t.FullName]++;
}
}
测试:
[TestFixture]
class NameTest
{
[Test]
public void test()
{
Console.WriteLine(new NameTest().MakeUpName());
Console.WriteLine(new NameTest().MakeUpName());
Console.WriteLine(new NameTest().MakeUpName());
Console.WriteLine(new NameTest().MakeUpName());
}
}
输出:
NameTest0
NameTest1
NameTest2
NameTest3
您可以在其中得到每个构造函数调用递增Employee类使用私有静态诠释。将此数字与typeof(this).Name值组合,可以按照描述生成名称。请注意,柜台将计入所有员工扩展班级,所以如果您想为每个员工扩展班级连续列出数字,则应为每个扩展班级实施特定的计数器。此外,每次应用程序重新启动时,计数器都将设置为零。
public Class ContractEmp:Employee{
private static int counter = 1;
private String name = "";
public ContractEmp() {
name = typeof(this).Name + counter++;
}
}
像这样的东西应该工作!
你为什么试图用泛型来做这样的事情? – Oded
泛型,因为这段代码对于所有类型都是相同的。 – Harsha