2017-01-02 52 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>();