本文整理汇总了C#中IReflect.GetMembers方法的典型用法代码示例。如果您正苦于以下问题:C# IReflect.GetMembers方法的具体用法?C# IReflect.GetMembers怎么用?C# IReflect.GetMembers使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类IReflect
的用法示例。
在下文中一共展示了IReflect.GetMembers方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: GetProperties
private static object[] GetProperties(IReflect type)
{
SortedList<string, List<EditorProperty>> folders = new SortedList<string, List<EditorProperty>>();
// Get all public and not so public fields and properties with EditorProperty
// attribute.
var members =
type.GetMembers(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance)
.Where(member => member.ContainsAttribute<EditorPropertyAttribute>());
foreach (MemberInfo member in members)
{
EditorPropertyAttribute attribute = member.GetAttribute<EditorPropertyAttribute>();
// Validate the type.
EditorPropertyType propType = Entity.GetEditorType(member.GetAssociatedType(), attribute.Type);
// Use default folder, if it is not specified.
string folderName = attribute.Folder ?? "Default";
// Register new folder, if there is a need for that.
if (!folders.ContainsKey(folderName))
{
folders.Add(folderName, new List<EditorProperty>());
}
// Add the property to the folder.
folders[folderName].Add
(
new EditorProperty
(
attribute.Name ?? member.Name,
attribute.Description,
attribute.DefaultValue ?? new Func<string>
(
delegate
{
switch (propType)
{
case EditorPropertyType.Bool:
return "false";
case EditorPropertyType.Int:
case EditorPropertyType.Float:
return "0";
case EditorPropertyType.Vector3:
case EditorPropertyType.Color:
return "0,0,0";
default:
return "";
}
}
).Invoke(),
propType,
new EditorPropertyLimits
{
Min = attribute.Min,
Max = attribute.Max
},
attribute.Flags
)
);
}
// Now lets create the array of properties.
List<object> properties = new List<object>();
foreach (KeyValuePair<string, List<EditorProperty>> folder in folders)
{
if (folder.Key == "Default")
{
properties.AddRange(folder.Value.Cast<object>());
}
else
{
properties.Add(new EditorProperty(folder.Key, "", "", EditorPropertyType.FolderBegin));
properties.AddRange(folder.Value.Cast<object>());
properties.Add(new EditorProperty(folder.Key, "", "", EditorPropertyType.FolderEnd));
}
}
return properties.ToArray();
}