通过反思获得自我的价值

时间:2012-05-04 00:48:45

标签: c# string reflection

我见过几个与此类似的问题,但没有一个问过我想要的东西。基本上,给定一个字符串,我想通过反射得到该字符串的值。

我知道这听起来很奇怪,但是我正在编写一个通用的方法来转储对象的所有公共属性,而string是一个特例,因为它的值与它组成的连接字符数组真的相同的。

所以,我的代码是:

var obj = "foo";
var props = obj.GetType().GetProperties();

// I now have two properties -- length and a character array
foreach (var prop in props)
{
   if (prop.PropertyType.IsArray || prop.GetIndexParameters().Length > 0)
   {
      lines.Add(tabs + prop.Name + "(array)");
      lines.Add(tabs + "\t" + prop.GetValue(target, new object[] { 0 }));
   }
   else
      Console.WriteLine(prop.Name + ": " + prop.GetValue(obj, null));
}

这输出以下内容:

Chars(array)
        f
Length: 3

这一切都很好,但有没有办法从这里得到实际的“foo”值,而不需要通过数组并连接它?

谢谢!

-Ari

2 个答案:

答案 0 :(得分:5)

if (obj is string)
  Console.WriteLine(obj);
else
    ... use reflection

答案 1 :(得分:0)

只需将其转回string