我正在尝试根据对象的类型生成一个Name。在我的系统中,我有,
class Employee {}
Class ContractEmp:Employee{}
class Manager:Employee{}
我正在尝试生成看起来像ContractEmp1的名称,其中1将来自增量器。我正在尝试使用泛型。
任何帮助
谢谢,
答案 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++;
}
}
这样的事情应该有效!