如何通过它自己的属性获取对象的引用?
在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实例。 car.Brand不是代码中的属性(比如说PropertyInfo),它只是值的字符串。 试想:
// Test(car.Brand); String brandName = car.Brand; // <- Just a string, nothing special
Test(brandName);
即使我们使用反射,我们不能让对象例如,我们可以得到的唯一的事情是 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差很多(引用是代表内存中特定位置的数字),所以它不应该在性能方面杀死你,整个对象(除非你的对象是可笑的巨大的东西,你只需要它的两个属性)。
以上是 如何通过它自己的属性获取对象的引用? 的全部内容, 来源链接: utcz.com/qa/260389.html