Я действительно не вижу смысла, но это может быть один подход. Ниже метод использует отражение в цикле по всем свойствам типа, получить значение для каждого свойства и использовать ReferenceEquals, чтобы проверить, ссылается ли свойство и тот же объект, как тот, запрошенной:
private string _myProperty = "TEST";
public string MyProperty
{
get
{
return _myProperty;
}
}
public string GetName(object value)
{
PropertyInfo[] properties = this.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance);
for (int i = 0; i < properties.Length; i++)
{
object propValue = properties[i].GetValue(this, null);
if (object.ReferenceEquals(propValue,value))
{
return properties[i].Name;
}
}
return null;
}
Console.WriteLine(GetName(this.MyProperty)); // outputs "MyProperty"
Это далеко от отказоустойчивых хотя , Предположим, что класс имеет два строковых свойства: MyProperty и YourProperty. Если мы в какой-то момент сделаем так: this.MyProperty = this.YourProperty
, они будут ссылаться на один и тот же строковый экземпляр, поэтому вышеупомянутый метод не может с уверенностью определить, какое свойство является нужным. Как уже написано, он вернет первый найденный в массиве.
Могу ли я спросить, чего вы надеетесь достичь? – mezoid
Мне нужно передать имя свойства некоторому методу, который я создаю ... в основном его отвратительное предыдущее значение назад вроде трюк. –
Я понимаю, но мне любопытно, как можно использовать имя свойства для другого кода. Возможно, вместо этого это сложная проблема, ее недостаток в дизайне ... Я не могу сказать это точно, пока не узнаю, что вам нужно достичь, и если есть лучший способ. – mezoid