如何通过其中一个对象获取对对象的引用';他自己的财产

本文关键字:引用 他自己 财产 自己的 对象 何通过 一个对象 获取 | 更新日期: 2023-09-27 18:26:08

在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);
    }
}

如何通过其中一个对象获取对对象的引用';他自己的财产

抱歉,但这是不可能的。您无法从String(其品牌名称)值中获取Car实例。汽车Brand不是代码中的属性(比如PropertyInfo),它只是String的值。想象一下:

   // Test(car.Brand);
   String brandName = car.Brand; // <- Just a string, nothing special
   Test(brandName);

即使我们使用反射,我们也无法获得Object实例,我们唯一能得到的是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);
}

是否有原因不想传递整个对象?我认为,由于在c#中,对象默认是通过引用传递的,这并不比传递int(引用是一种表示内存中特定位置的数字)差多少,所以传递整个对象不应该影响性能(除非你的对象非常大,你只需要它的2个属性)。