namespace Caliburn.Micro.Core { using System; using System.Collections.Generic; using System.Linq; using System.Reflection; /// /// Generic extension methods used by the framework. /// public static class ExtensionMethods { /// /// Get's the name of the assembly. /// /// The assembly. /// The assembly's name. public static string GetAssemblyName(this Assembly assembly) { return assembly.FullName.Remove(assembly.FullName.IndexOf(',')); } /// /// Gets all the attributes of a particular type. /// /// The type of attributes to get. /// The member to inspect for attributes. /// Whether or not to search for inherited attributes. /// The list of attributes found. public static IEnumerable GetAttributes(this MemberInfo member, bool inherit) { #if WinRT || CORE return member.GetCustomAttributes(inherit).OfType(); #else return Attribute.GetCustomAttributes(member, inherit).OfType(); #endif } #if WinRT || CORE /// /// Gets a collection of the public types defined in this assembly that are visible outside the assembly. /// /// The assembly. /// A collection of the public types defined in this assembly that are visible outside the assembly. /// public static IEnumerable GetExportedTypes(this Assembly assembly) { if (assembly == null) throw new ArgumentNullException("assembly"); return assembly.ExportedTypes; } /// /// Returns a value that indicates whether the specified type can be assigned to the current type. /// /// The target type /// The type to check. /// true if the specified type can be assigned to this type; otherwise, false. public static bool IsAssignableFrom(this Type target, Type type) { return target.GetTypeInfo().IsAssignableFrom(type.GetTypeInfo()); } #endif /// /// Gets the value for a key. If the key does not exist, return default(TValue); /// /// The type of the keys in the dictionary. /// The type of the values in the dictionary. /// The dictionary to call this method on. /// The key to look up. /// The key value. default(TValue) if this key is not in the dictionary. public static TValue GetValueOrDefault(this IDictionary dictionary, TKey key) { TValue result; return dictionary.TryGetValue(key, out result) ? result : default(TValue); } } }