我想知道是否可以这样做:
class brand
{
string name;
}
class car
{
string carname;
brand carbrand;
}
现在我有一个这样的字符串和一个car类型的实例化对象:
car carobject = new car();
string brandNameOfCar = DoSomeMagicalReflectionStuff(car, "car.brand.name");
“DoSomeMagicalReflectionStuff”方法如何?
甚至可以做类似的事情:
car carobject = new car();
string brandNameOfCar = DoSomeMagicalReflectionStuff(car, "car.brand.name.ToFormatedString()");
谢谢!
答案 0 :(得分:4)
我没有对此进行测试,但这里应该有效:
car c = new car();
object val = typeof(car).GetField("carbrand", BindingFlags.Private).GetValue(c);
string result = (val as brand).ToFormattedString();
答案 1 :(得分:1)
我通常不会尝试插入我参与的产品,但这是Vici Parser(.NET的开源表达式解析器)要解决的完美问题:
var parser = new CSharpParser();
var context = new CSharpContext();
context["car"] = carobject;
string brandNameOfCar =
parser.Evaluate<string>("car.brand.name.ToFormatedString()", context);
答案 2 :(得分:0)
Typeof(car).GetProperty(“brand”,bindingflags.instance | bindingflags.private).GetValue(carobject,null) 应该如此。在我的手机上点击我的小语法错误
编辑:以上将给你品牌对象,你可以dó相同的到达名称属性
答案 3 :(得分:0)
拥有一个以字符串作为参数的汽车构造函数更有意义,并执行以下操作:
class brand
{
public string name;
}
class car
{
public car(string s)
{
Match match = Regex.Match(s, @"(?<carname>[^\.]+)\.(?<brandname>.+)");
if (match.Success)
{
this.carname = match.Groups["carname"].Value;
this.carbrand = new brand();
this.carbrand.name = match.Groups["brandname"].Value;
} else
{
throw new ArgumentException("Not a valid car");
}
}
string carname;
brand carbrand;
public override string ToString()
{
return carname + "." + carbrand.name;
}
}
具有以下用途:
car c = new car("M5.BMW");
Console.WriteLine(c.ToString());
您可以将其分为Parse和TryParse方法。