Включенная страница:
<!-- opening and closing tags of included page -->
<ui:composition ...>
</ui:composition>
Включая страницу:
<!--the inclusion line in the including page with the content-->
<ui:include src="yourFile.xhtml"/>
ui:composition
, как показано выше. ui:include
в включающий файл xhtml, как показано выше. public static object GetPropValue(object src, string propName)
{
return src.GetType().GetProperty(propName).GetValue(src, null);
}
Конечно, вы захотите добавить проверку и еще много чего, но в этом суть .
Вы никогда не упоминаете, какой объект вы проверяете, а так как вы отвергаете объекты, которые ссылаются на данный объект, я буду считать, что вы имеете в виду статический объект.
using System.Reflection;
public object GetPropValue(string prop)
{
int splitPoint = prop.LastIndexOf('.');
Type type = Assembly.GetEntryAssembly().GetType(prop.Substring(0, splitPoint));
object obj = null;
return type.GetProperty(prop.Substring(splitPoint + 1)).GetValue(obj, null);
}
Обратите внимание, что я отметил объект, который проверяется, с помощью локальной переменной obj
. null
означает статический, в противном случае установите его на то, что хотите. Также обратите внимание, что GetEntryAssembly()
является одним из немногих доступных методов для получения "запущенной" сборки, вы можете поиграть с ним, если вам трудно загрузить тип.
А как насчет использования CallByName
из пространства имен Microsoft.VisualBasic
(Microsoft.VisualBasic.dll
)? Оно использует отражение для получения свойств, полей и методов обычных объектов, COM-объектов и даже динамических объектов.
using Microsoft.VisualBasic;
using Microsoft.VisualBasic.CompilerServices;
и затем
Versioned.CallByName(this, "method/function/prop name", CallType.Get).ToString();
Как насчет чего-то подобного:
public static Object GetPropValue(this Object obj, String name) {
foreach (String part in name.Split('.')) {
if (obj == null) { return null; }
Type type = obj.GetType();
PropertyInfo info = type.GetProperty(part);
if (info == null) { return null; }
obj = info.GetValue(obj, null);
}
return obj;
}
public static T GetPropValue<T>(this Object obj, String name) {
Object retval = GetPropValue(obj, name);
if (retval == null) { return default(T); }
// throws InvalidCastException if types are incompatible
return (T) retval;
}
Это позволит вам опуститься в свойства, используя одну строку, например:
DateTime now = DateTime.Now;
int min = GetPropValue<int>(now, "TimeOfDay.Minutes");
int hrs = now.GetPropValue<int>("TimeOfDay.Hours");
Вы можете использовать эти методы как статические методы или расширения.
.Dim NewHandle As YourType = CType(Microsoft.VisualBasic.CallByName(ObjectThatContainsYourVariable, "YourVariableName", CallType), YourType)