我正在将一个 List 传递给一个方法,我想知道,这是返回此列表实际名称的最简单方法。我正在努力实现这样的目标。
static List<string> GatherDataPerProduct(List<Pandora.Data.DomainObject> lstdata)
{
if(lstData.value == "subjects")
{
//do whatever
}
您需要将列表包装在另一个包含额外数据的对象中。例如
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")
....
}
如果您的意思是将列表传递给这样的方法时使用的变量的名称:
static List<string> GatherDataPerProduct(List<Pandora.Data.DomainObject> lstdata)
{
if(lstData.value == "subjects")
{
//do whatever
}
List<DomainObject> subjects;
GatherDataPerProduct(subjects);
那么你想要做的事情是不可能的。原因是在编译时,编译器会删除所有变量名。这意味着您无法获取变量的名称。如果您真正想要的是命名对象本身,那么您应该使用 Dave 的答案并将列表包装在另一个对象中并在其上定义一个属性。
尝试这个:
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;
}
}
}
原来的解决方案在这里。