private IPropertyModel CreateReference(Type type, string masterKey, string idMemberName, string title)
        {
            var propertyType = TypeRecognizer.ParseType(type);

            switch (propertyType)
            {
            case PropertyKind.Integer:
                if (!loader.Masters.ContainsKey(masterKey))
                {
                    throw new KeyNotFoundException($"[PwReferenceMember] 属性で指定されたマスターキー \"{masterKey}\" を持つ [PwMaster] 属性のついたメンバーがプロジェクトに含まれていません。");
                }
                return(new ReferenceByIntProperty(loader.Masters[masterKey], idMemberName)
                {
                    Title = { Value = title }
                });

            case PropertyKind.BasicCollection:
                if (!loader.Masters.ContainsKey(masterKey))
                {
                    throw new KeyNotFoundException($"[PwReferenceMember] 属性で指定されたマスターキー \"{masterKey}\" を持つ [PwMaster] 属性のついたメンバーがプロジェクトに含まれていません。");
                }
                return(new ReferenceByIntCollectionProperty(loader.Masters[masterKey], idMemberName, this)
                {
                    Title = { Value = title }
                });

            default:
                throw new InvalidOperationException("ID参照をするプロパティの型は int, int[] 型のみがサポートされます。");
            }
        }
        public IPropertyModel Create(Type type, string title)
        {
            var propertyType = TypeRecognizer.ParseType(type);

            if (!type.IsPublic && !type.IsNestedPublic)
            {
                throw new ArgumentException($"型 {type.FullName} がパブリックではありませんでした。", nameof(type));
            }
            var model = Create(propertyType, type);

            model.Title.Value = title;
            return(model);
        }
        private IPropertyModel CreateMultiLine(Type type, string title)
        {
            var propertyType = TypeRecognizer.ParseType(type);

            switch (propertyType)
            {
            case PropertyKind.String:
                return(new StringProperty(true)
                {
                    Title = { Value = title }
                });

            default: throw new Exception();
            }
        }