-7

我正在将一个 List 传递给一个方法,我想知道,这是返回此列表实际名称的最简单方法。我正在努力实现这样的目标。

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

3 回答 3

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")
    ....
}
于 2013-05-16T09:01:55.837 回答
2

如果您的意思是将列表传递给这样的方法时使用的变量的名称:

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

List<DomainObject> subjects;
GatherDataPerProduct(subjects);

那么你想要做的事情是不可能的。原因是在编译时,编译器会删除所有变量名。这意味着您无法获取变量的名称。如果您真正想要的是命名对象本身,那么您应该使用 Dave 的答案并将列表包装在另一个对象中并在其上定义一个属性。

于 2013-05-16T09:06:05.970 回答
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;
        }
    }
}

原来的解决方案在这里

于 2013-05-16T09:22:42.333 回答