获取参数对象的名称

我经常必须从我的代码中将各种列表<>导出到外部文件。为了以通用的方式来完成它,我想写一个函数,它只是取得我变量的名称,然后根据该类中的字段进行导出。获取参数对象的名称

我工作得很好,我唯一无法弄清楚的是我想要导出的变量的名称。我可以获得班级的类型,但这不是我需要的。我可以得到我放入的变量的名称,但那不是我所需要的。

下面你会发现我正在使用的代码:

public class testClass 

{

public string firstName {get; set;}

public string lastName {get; set;}

}

private void test()

{

testClass nameOfMyTestClass = new testClass();

// DATA ADDED TO nameOfMyTestClass

...

exportClass(nameOfMyTestClass);

}

public void exportClass(object selectedClass)

{

string objectName = selectedClass.name;

string output = string.Empty;

// GET THE DATA FROM THE SETTINGS

PropertyInfo[] properties = selectedClass.GetType().GetProperties();

foreach (var p in properties)

{

output += "[" + p.Name + "] " + p.GetValue(selectedClass) + Environment.NewLine;

}

// WRITE THE FILE

File.WriteAllText(basePath + @"DATA\" + objectName + ".txt", output, Encoding.UTF8);

}

所以我传递变量nameOfMyTestClass作为对象插入方法exportClass因为我希望能够用这个多种不同类。

在该方法中,我想使用我添加的变量的名称作为我的文件的名称:例如nameOfMyTestClass.txt

我可以通过使用GetType()获得类本身,或者我可以使用ToString(),但是这给了我NAMESPACE.Form1 + testClass作为结果,但我无法找到一种方法来获得实际变量的名称。

有没有人有一个想法,我可以做到这一点?

感谢

回答:

你不能得到通过反射的变量名,因为它们不存在在编译的程序集的元数据。

但是要获取变量的名称,可以使用nameof()运算符(随C#6.0引入)。请注意,您必须添加一个额外的参数名称:

exportClass(nameOfMyTestClass, nameof(nameOfMyTestClass)); 

public void exportClass(object selectedClass, string name)

{ /* ... */ }

nameof运营商的好处是,如果你使用重构(重命名),传递的名称也将被改变,这一比例仅为在字符串文字中传递名称。

回答:

这是不可能的,因为变量在编译为IL后没有名称。但有一种变通方法给你:

void ExportClass(object obj, string className) 

{

...

}

var testClass = new TestClass();

ExportClass(testClass, nameof(testClass));

您与nameof传递变量名称的方法,你可以在那里使用它。

以上是 获取参数对象的名称 的全部内容, 来源链接: utcz.com/qa/258048.html

回到顶部