Example #1
0
        /// <summary>
        /// 添加 struct 约束
        /// </summary>
        /// <param name="paramterName"></param>
        /// <returns></returns>
        public GenericBuilder AddStruct(string paramterName)
        {
            DefineGenericInfo info = Search(paramterName);

            info.Name      = paramterName;
            info.Parameter = SyntaxFactory.TypeParameter(SyntaxFactory.Identifier(paramterName));
            info.ConstraintClauseSyntax.Add(
                SyntaxFactory.TypeParameterConstraintClause(SyntaxFactory.IdentifierName(paramterName)).WithConstraints(
                    SyntaxFactory.SingletonSeparatedList <TypeParameterConstraintSyntax>(
                        SyntaxFactory.ClassOrStructConstraint(SyntaxKind.StructConstraint))));

            return(this);
        }
Example #2
0
        /// <summary>
        /// 搜索
        /// </summary>
        /// <param name="paramterName"></param>
        /// <returns></returns>
        private DefineGenericInfo Search(string paramterName)
        {
            DefineGenericInfo info = default;

            if (!tokens.ContainsKey(paramterName))
            {
                tokens.Add(paramterName, info);
            }
            else
            {
                info = tokens[paramterName];
            }
            return(info);
        }
Example #3
0
        /// <summary>
        /// 添加 unmanaged 约束
        /// </summary>
        /// <param name="paramterName"></param>
        /// <returns></returns>
        public GenericBuilder AddUnmanaged(string paramterName)
        {
            DefineGenericInfo info = Search(paramterName);

            info.Parameter = SyntaxFactory.TypeParameter(SyntaxFactory.Identifier(paramterName));

            info.ConstraintClauseSyntax.Add(
                SyntaxFactory.TypeParameterConstraintClause(SyntaxFactory.IdentifierName(paramterName))
                .WithConstraints(
                    SyntaxFactory.SingletonSeparatedList <TypeParameterConstraintSyntax>(
                        SyntaxFactory.TypeConstraint(
                            SyntaxFactory.IdentifierName("unmanaged")))));

            return(this);
        }
Example #4
0
        /// <summary>
        /// 添加一个参数
        /// </summary>
        /// <param name="paramterName">参数名称</param>
        /// <param name="info">信息</param>
        /// <returns></returns>
        private GenericBuilder Add(string paramterName, out DefineGenericInfo info)
        {
            if (!tokens.ContainsKey(paramterName))
            {
                info = new DefineGenericInfo();
                tokens.Add(paramterName, info);
            }
            else
            {
                info = tokens[paramterName];
            }

            info.Name      = paramterName;
            info.Parameter = SyntaxFactory.TypeParameter(SyntaxFactory.Identifier(paramterName));

            return(this);
        }
Example #5
0
        /// <summary>
        /// 添加接口约束
        /// </summary>
        /// <param name="paramterName"></param>
        /// <param name="interfaces"></param>
        /// <returns></returns>
        public GenericBuilder AddInterface(string paramterName, string[] interfaces)
        {
            DefineGenericInfo info = Search(paramterName);

            info.Parameter = SyntaxFactory.TypeParameter(SyntaxFactory.Identifier(paramterName));

            SyntaxNodeOrToken[] syntaxes = new SyntaxNodeOrToken[interfaces.Length];

            for (int i = 0; i < interfaces.Length; i++)
            {
                syntaxes[i] = SyntaxFactory.TypeConstraint(
                    SyntaxFactory.IdentifierName(interfaces[i]));
            }

            info.ConstraintClauseSyntax.Add(
                SyntaxFactory.TypeParameterConstraintClause(
                    SyntaxFactory.IdentifierName(paramterName))
                .WithConstraints(
                    SyntaxFactory.SeparatedList <TypeParameterConstraintSyntax>(syntaxes)));

            return(this);
        }