0

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

class Employee {}

Class ContractEmp:Employee{}

class Manager:Employee{}

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

任何帮助

谢谢,

4

3 回答 3

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());
    }
}

输出:

名称
测试
0
名称测试1 名称测试2 名称测试3

于 2012-09-24T11:28:45.833 回答
0

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

于 2012-09-24T10:37:28.623 回答
0
public Class ContractEmp:Employee{
    private static int counter = 1;
    private String name = "";

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

像这样的东西应该工作!

于 2012-09-24T10:41:37.050 回答