这是一个我无法回答的粗略问题。
主程序
class Program{
static void Main(string[] args){
Console.WriteLine("Begin");
var myClass = new MyClass();
Util.Print(myClass.Id);
Util.Print(myClass.Server);
Util.Print(myClass.Ping);
Console.WriteLine("End");
}
}
如何实现Util.Print方法以将此输出发送到控制台:
Begin
Id
Server
Ping
End
答案 0 :(得分:14)
假设您不想使用字符串,最常见的答案是通过Expression
- 基本上模仿丢失的infoof
;你必须使用类似的东西:
Console.WriteLine("Begin");
var myClass = new MyClass();
Util.Print(() => myClass.Id);
Util.Print(() => myClass.Server);
Util.Print(() => myClass.Ping);
Console.WriteLine("End");
假设它们都是属性/字段(编辑添加了方法调用支持):
public static class Util
{
public static void Print<T>(Expression<Func<T>> expr)
{
WriteExpression(expr);
}
public static void Print(Expression<Action> expr) // for "void" methods
{
WriteExpression(expr);
}
private static void WriteExpression(Expression expr)
{
LambdaExpression lambda = (LambdaExpression)expr;
switch (lambda.Body.NodeType)
{
case ExpressionType.MemberAccess:
Console.WriteLine(((MemberExpression)lambda.Body)
.Member.Name);
break;
case ExpressionType.Call:
Console.WriteLine(((MethodCallExpression)lambda.Body)
.Method.Name);
break;
default:
throw new NotSupportedException();
}
}
}
答案 1 :(得分:4)
除了Marc的回答:here is an article,它解释了几种做你想做的事情的方法(一种这样的方法使用表达式)。
答案 2 :(得分:-1)
public string Id {
get {
return "Id;"
}
}
嘿嘿呃,虽然我认为这不是你的意思:-(答案可能与反思有关。
查看http://msdn.microsoft.com/en-us/library/ms173183(VS.80).aspx