使用泛型命名生成器

时间:2012-09-24 10:31:53

标签: c#-4.0 generics

我正在尝试根据对象的类型生成一个Name。在我的系统中,我有,

class Employee {}

Class ContractEmp:Employee{}

class Manager:Employee{}

我正在尝试生成看起来像ContractEmp1的名称,其中1将来自增量器。我正在尝试使用泛型。

任何帮助

谢谢,

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

您可以在Employee类中使用private static int,它会在每次构造函数调用时递增。将此数字与typeof(this).Name值组合,您可以生成所描述的名称。请注意,计数器将计入所有Employee扩展类,因此如果您需要每个Employee扩展类的连续数字列表,则应为每个扩展类实现特定计数器。此外,每次应用程序重新启动时,计数器都将设置为零。

答案 2 :(得分:0)

public Class ContractEmp:Employee{
    private static int counter = 1;
    private String name = "";

    public ContractEmp() {
      name = typeof(this).Name + counter++;
    }
}

这样的事情应该有效!