如何将连接的字符串强制转换为Class.Property
本文关键字:转换 Class Property 字符串 连接 | 更新日期: 2023-09-27 17:49:33
我有一个静态类,其中有几个用于存储常量值的静态字符串。例如,Foo。Bar可能返回一个表示数据库列名和Foo的字符串。Foo可能返回一个带有epoch值的字符串。
在我的应用程序中,我需要将类名与字符串的名称连接起来以获得我需要的值。例如,我知道类名是Foo。我还知道属性名是Bar。但是,属性名称根据另一个值更改。在foreach中,我将类名与其他属性名连接起来以获得字符串"Foo.Bar"。到目前为止我们还好。当我将连接的字符串传递给接受字符串的方法时,它不会从类中检索静态字符串。换句话说,即使连接的字符串被正确地形成为"Foo。,我的方法不返回Foo.Bar的值。如果我硬编码Foo。我得到了我需要的字符串,但这需要在运行时完成。
有什么想法我可以解决这个问题吗?我能把这个投射到什么东西上吗?
public static class Foo
{
public static string Bar = "Sample Text";
}
public class Program
{
static void Main()
{
// string "Foo.Bar" is built here by combining two strings.
...
// more processing
...
// I need the literal value of Foo.Bar here not literally "Foo.Bar"...
}
}
如果Foo
始终是类,那么您可以只传递属性的名称而不是连接的字符串:
public string GetString(string propertyName)
{
return typeof(Foo).GetProperty(propertyName).GetValue(null, null);
}
如果不总是Foo
,也可以将类型传递给GetString()
方法
Reflection…
考虑:
public class Foo
{
public string Bar { get; set; }
}
你可以这样做:
Foo a = new Foo() { Bar = "Hello!" };
MessageBox.Show(typeof(Foo).GetProperty("Bar").GetValue(a,null) as string);
您需要使用反射。顺便说一下,反射很慢,会在运行时导致错误,对重构工具没有响应,等等,所以你可能需要重新考虑你是如何做事情的;如。, Dictionary<string, string>
似乎更容易管理。
对于反射,您需要获得(a)类型,因为看起来您正在引用> 1类,然后(b)属性。比如:
var lookupKey = "Foo.Bar";
var typeName = lookupKey.Substring(0, lookupKey.LastIndexOf("."));
var propName = lookupKey.Substring(lookupKey.LastIndexOf(".") + 1);
var typeInfo = Type.GetType(typeName, true);
var propInfo = typeInfo.GetProperty(propName);
return propInfo.GetGetMethod().Invoke(null, null);