2013-05-16 224 views
-7

我正在將List傳遞給一個方法,我想知道,返回此列表的實際名稱的最簡單方法。 我想要實現這樣的事情。如何獲取列表的名稱

static List<string> GatherDataPerProduct(List<Pandora.Data.DomainObject> lstdata) 
{ 
    if(lstData.value == "subjects") 
    { 
     //do whatever 
    } 
+14

你的意思是'這個名單的名字'? – Kasyx

+1

變量「名稱」本身沒有什麼意義 –

+1

爲什麼這個問題如此低落?確實,他試圖做的事情可能是不可能的,但這並不是一個無效的問題。 – Kenneth

回答

2

如果你的意思是,當名單被傳遞給方法使用這樣的變量名:

static List<string> GatherDataPerProduct(List<Pandora.Data.DomainObject> lstdata) 
    { 
     if(lstData.value == "subjects") 
     { 
      //do whatever 
     } 

List<DomainObject> subjects; 
GatherDataPerProduct(subjects); 

那麼什麼你試圖做的事情是不可能的。原因是在編譯時,編譯器將刪除所有變量名稱。這意味着你不能得到變量的名字。如果你真正想要的是命名對象本身,那麼你應該使用Dave的答案並將該列表包裝在另一個對象中並在其上定義一個屬性。

2

您需要將您的列表包裹在另一個包含額外數據的對象中。例如

public class DataList 
{ 
    public List<Pandora.Data.DomainObject> Data {get; set;} 
    public string Name {get; set;} 
} 

...

static List<string> GatherDataPerProduct(DataList lstdata) 
{ 
    if(lstData.Name == "subjects") 
    .... 
} 
1

試試這個:

using Extensions; 

namespace ConsoleApplication 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      var subjects = default(List<Pandora.Data.DomainObject>); 
      var result = Helper<List<Pandora.Data.DomainObject>>.ExampleFunction(() => subjects); 
     } 
    } 

} 
namespace Extensions 
{ 
    static class Helper<T> 
    { 
     public static List<string> ExampleFunction(Expression<Func<T>> f) 
     { 
      if ((f.Body as MemberExpression).Member.Name == "subjects") 
      { 
       return new List<String>(); 
      } 
      return null; 
     } 
    } 
} 

原來的解決方案是here