在WPF中,你有很多类可以传递一个属性进行处理;例如ValueConverters,RuleValidations等。将属性转换为正确的类型并使用它。
但我经常需要某些特定对象的其他属性来进行计算和比较值。
最后一天看来,我一直在试验丑陋的东西,例如将整个对象作为参数传递,只是为了获取实例对象。
必须有办法从其中一个属性中获取对象吗?
我该怎么做?
例如在此代码中:
public class Car
{
public string Brand { get; set; }
public string Color { get; set; }
}
class Program
{
public static void Main(string[] args)
{
Car car = new Car();
car.Brand = "Porsche";
car.Color = "Yellow";
Test(car.Brand);
}
public static void Test(object value)
{
var brand = (String)value;
// Get the Car object instance reference from the passed object?
var carInstance = ...
Console.WriteLine("This {0} has a {1} paint job",
brand, carInstance.Color);
}
}
答案 0 :(得分:1)
抱歉,但不可能。您无法从String(其品牌名称)值获取Car实例。 car.Brand不是代码中的属性(比如PropertyInfo),它只是String 的值。 试想一下:
// Test(car.Brand);
String brandName = car.Brand; // <- Just a string, nothing special
Test(brandName);
即使我们使用Reflection,我们也无法获得Object instance ,我们唯一能得到的就是
class
(类型):
PropertyInfo pi = typeof(Car).GetProperty("Brand");
...
Type tp = pi.ReflectedType; // <- Car; Type only, not instance
相反,您可以传递Car实例并获取所需的所有属性:
public static void Main(string[] args)
{
Car car = new Car();
car.Brand = "Porsche";
car.Color = "Yellow";
Test(car);
}
public static void Test(Car value)
{
Console.WriteLine("This {0} has a {1} paint job", value.Brand, value.Color);
}
答案 1 :(得分:0)
您是否有理由不想传递整个物体?我认为,因为默认情况下的对象是通过c#中的引用传递的,所以传递一个int(一个引用是一种代表内存中特定位置的数字)并不比它更糟糕,所以它不应该杀了你传递整个对象的性能(除非你的对象是一个非常庞大的东西,你只需要2个属性)。