获取参数对象的名称
我经常必须从我的代码中将各种列表<>导出到外部文件。为了以通用的方式来完成它,我想写一个函数,它只是取得我变量的名称,然后根据该类中的字段进行导出。获取参数对象的名称
我工作得很好,我唯一无法弄清楚的是我想要导出的变量的名称。我可以获得班级的类型,但这不是我需要的。我可以得到我放入的变量的名称,但那不是我所需要的。
下面你会发现我正在使用的代码:
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