2017-01-02 45 views
-3

下面是一个属性:获取返回的对象名

public IMongoCollection<Student> Students 
{ 
    get 
    { 
     string returnObjectName = ??? ; 
     return _database.GetCollection<Student>("Student"); 
    } 
} 

有没有什么办法让returnObjectName的返回类型?我的意思是,我想在returnObjectName中获得学生对象名称。

+5

你能详细点吗?现在我有两个问题。 1)'''returnObjectName'''是一个字符串,但从来没有用过任何东西。我无法猜测它应该包含什么。 2)我不知道'学生对象名称'是什么意思。 一些示例值,可以更好地描述您期望的值或您想要做什么? –

+1

你想要做这个吗? 'string returnObjectName = typeof(Student).Name;'? – Floc

+0

您是否有可能寻找您的学生属性的学生的名字?在这种情况下'.name'是一个解决方案 –

回答

1

用C#6可以使用nameof操作以检索特定类型的名称:

string returnObjectName = nameof(Student); 

在这种情况下Student是对类,它提供了编译时间错误和的优点的参考支持'重构重命名'操作。

你也可以使用反射与typeof来实现相同的,例如,当你不能使用C#6尚未:

string returnObjectName = typeof(Student).Name; 

请注意,第一个(nameof)是一个编译时操作,而后者(typeof)运行时操作,这是略少高性能。

0

我猜测,而不是写

var students = db.GetCollection<Student>("Student"); 

你想写

var students = db.Students(); 

我会建议你使用扩展方法来实现这一目标。一个通用的扩展,并为每个类型增加一个。

public static class Extensions 
{ 
    public static IMongoCollection<T> Items<T>(this IMongoDatabase database) 
    { 
     return database.GetCollection<T>(typeof(T).Name); 
    } 

    public static IMongoCollection<Student> Students(this IMongoDatabase database) 
    { 
     return database.Items<Student>(); 
    } 
} 

你可以使用通用的扩展这样的,如果你不写类型的特定扩展名。

var students = db.Items<Student>();