【发布时间】:2021-12-04 16:03:12
【问题描述】:
我不知道如何更好地制定标题。我看到不少帖子标题相似,但讨论的内容完全不同。
所以我们开始吧。实际的实地情况很复杂,但我会尝试发布一个绝对简约的例子来描述它。
假设我们有一个名为Animal的类:
class Animal
{
public void Run()
{
try
{
//try running
}
catch(Exception e)
{
MessageBox.Show(this.SomeCleverWayOfGettingPropertyName() + " failed to run");
}
}
}
现在我在另一个类中定义Animal类型的几个属性:
class Zoo
{
public Animal Zebra {get; set;}
public Animal Lion {get; set;}
public Animal Rhino {get; set;}
public void RunAll()
{
Zebra.Run();
Lion.Run();
Rhino.Run();
}
}
我应该写什么来代替 SomeCleverWayOfGettingPropertyName() 让它显示动物的名称(即声明的属性的名称),例如“斑马无法运行”。
正如我所说,实际情况更复杂,所以请避免回答“为什么不重新设计整个代码库,而是尝试 X”之类的答案。我希望在System.Reflection 中找到一些东西来找出调用成员的名字,但我还没有找到类似的东西。
【问题讨论】:
-
@CodeCaster:嗯……那将是一个障碍。问题是
Animal的实例太多了,所以我试图创建一个集中位置来捕获Run中的异常。如果我们知道它总是会在属性上而不是局部变量上被调用,它会有所帮助吗?通过强制将其转换为PropertyInfo或其他什么?
标签: c# .net reflection