Как я могу узнать, имеет ли определенный тип подключенный преобразователь строк? - PullRequest
0 голосов
/ 29 сентября 2010

Вот проблема:

У меня есть свойство определенного объекта.Это свойство имеет тип т.Мне нужно выяснить, можно ли присоединить строковое значение к этому свойству.

Например: у меня есть экземпляр Windows.Controls.Button.Мне нужен механизм, который будет возвращать true для свойства Button.Background, но false для Button.Template.

Кто-нибудь может помочь?Большое спасибо

Ответы [ 2 ]

1 голос
/ 30 сентября 2010

Я думаю, что вы берете проблему в неправильном направлении:

Свойство не принимает напрямую String: фактически свойство преобразуется в хороший тип, если существует конвертер.

Вы затемможет посмотреть, если конвертер существует с использованием этого кода:

public static bool PropertyCheck(Type theTypeOfTheAimedProperty, string aString)
{
   // Checks to see if the value passed is valid.
   return TypeDescriptor.GetConverter(typeof(theTypeOfTheAimedProperty))
            .IsValid(aString);
}

Эти страницы могут вас также заинтересовать:

  1. http://msdn.microsoft.com/en-us/library/aa970913.aspx
  2. http://msdn.microsoft.com/en-us/library/system.componentmodel.typeconverter.aspx
0 голосов
/ 29 сентября 2010
public static bool PropertyCheck(this object o, string propertyName)
{
    if (string.IsNullOrEmpty(propertyName))
        return false;
    Type type = (o is Type) ? o as Type : o.GetType();

    PropertyInfo pi = type.GetProperty(propertyName, BindingFlags.Instance | BindingFlags.Public | BindingFlags.SetProperty);

    if (pi != null && pi.PropertyType == typeof(string))
        return true;

    return false;
}

и затем вызовите его так:

object someobj = new Object();
if (someobj.PropertyCheck("someproperty"))
     // do stuff

или вы можете сделать это так:

Type type = typeof(someobject);
if (type.PropertyCheck("someproperty"))

это имеет некоторые ограничения, поскольку вы не можете проверить сам тип Type для свойств, но вы всегда можете сделать другую версию этого, если это необходимо.

Я думаю, это то, что вы хотели, надеюсь, это поможет

...