Пример #1
0
        public void Changing_FindIdentityProperty_breaks_loading()
        {
            using (var store = NewDocumentStore())
            {
                store.Conventions.FindIdentityProperty = FindGuidIdentityProperty;

                var id   = Guid.NewGuid();
                var name = "bar";

                using (var session = store.OpenSession())
                {
                    var entity = new BaseOne()
                    {
                        BaseOneGuid = id, Name = name
                    };
                    session.Store(entity);
                    session.SaveChanges();
                }

                using (var session2 = store.OpenSession())
                {
                    var entity = session2.Load <BaseOne>(id);
                    Assert.NotNull(entity);
                    Assert.Equal(name, entity.Name);
                }
            }
        }
Пример #2
0
        public void PassThroughConstructors()
        {
            {
                TypeBuilder b = CreateTypeBuilder(typeof(BaseOne));
                b.DefinePassThroughConstructors(c => c.Attributes | MethodAttributes.Public);
                Type    t    = b.CreateTypeInfo().AsType();
                BaseOne one1 = (BaseOne)Activator.CreateInstance(t, 5);
                Assert.That(one1.CtorMessage, Is.EqualTo(".private.protected"));
                BaseOne one2 = (BaseOne)Activator.CreateInstance(t, "a string");
                Assert.That(one2.CtorMessage, Is.EqualTo(".private.public"));
            }
            {
                TypeBuilder b = CreateTypeBuilder(typeof(BaseTwo));
                b.DefinePassThroughConstructors(c => c.Attributes | MethodAttributes.Public);
                Type    t    = b.CreateTypeInfo().AsType();
                var     ctor = t.GetConstructors()[0];
                BaseTwo two  = (BaseTwo)ctor.Invoke(new object[] { new int[] { 1, 2, 3, 4 } });
                Assert.That(two.CtorMessage, Is.EqualTo("4"));
            }
            {
                TypeBuilder b = CreateTypeBuilder(typeof(BaseThree));
                b.DefinePassThroughConstructors(
                    c => c.Attributes | MethodAttributes.Public,
                    (ctor, attrData) => attrData.NamedArguments.Any(),
                    (param, attrData) => attrData.ConstructorArguments.Any());

                Type      t       = b.CreateTypeInfo().AsType();
                var       theCtor = t.GetConstructors()[0];
                BaseThree three   = (BaseThree)theCtor.Invoke(new object[] { "s0", "s1", "s2" });
                Assert.That(three.CtorMessage, Is.EqualTo("s0s1s2"));
                // Only attribute defined via Named arguments are defined on the final ctor.
                CollectionAssert.AreEquivalent(new string[] { "OnCtorByProperty", "OnCtorByField" }, theCtor.GetCustomAttributes <CustAttr>().Select(a => a.Name ?? a.FieldName));
                // Only the one defined by constructor argument is redefined.
                Assert.That(theCtor.GetParameters()[0].GetCustomAttributes <CustAttr>().Single().Name, Is.EqualTo("OnParamByParam"));
                Assert.That(theCtor.GetParameters()[1].GetCustomAttributes <CustAttr>(), Is.Empty);
                Assert.That(theCtor.GetParameters()[2].GetCustomAttributes <CustAttr>(), Is.Empty);
            }
            {
                TypeBuilder b = CreateTypeBuilder(typeof(BaseThree));
                b.DefinePassThroughConstructors(c => c.Attributes | MethodAttributes.Public);
                Type      t     = b.CreateTypeInfo().AsType();
                var       ctor  = t.GetConstructors()[0];
                BaseThree three = (BaseThree)ctor.Invoke(new object[] { "s0", "s1", "s2" });
                Assert.That(three.CtorMessage, Is.EqualTo("s0s1s2"));
                // Everything is defined.
                CollectionAssert.AreEquivalent(new string[] { "OnCtorByParam", "OnCtorByProperty", "OnCtorByField" }, ctor.GetCustomAttributes <CustAttr>().Select(a => a.Name ?? a.FieldName));
                Assert.That(ctor.GetParameters()[0].GetCustomAttributes <CustAttr>().Single().Name, Is.EqualTo("OnParamByParam"));
                Assert.That(ctor.GetParameters()[1].GetCustomAttributes <CustAttr>().Single().Name, Is.EqualTo("OnParamByProperty"));
                Assert.That(ctor.GetParameters()[2].GetCustomAttributes <CustAttr>().Single().FieldName, Is.EqualTo("OnParamByField"));
            }
        }
Пример #3
0
		public void Changing_FindIdentityProperty_breaks_loading()
		{
			using(var store = NewDocumentStore())
			{
				store.Conventions.FindIdentityProperty = FindGuidIdentityProperty;

				var id = Guid.NewGuid();
				var name = "bar";

				using (var session = store.OpenSession())
				{
					var entity = new BaseOne() { BaseOneGuid = id, Name = name };
					session.Store(entity);
					session.SaveChanges();
				}

				using (var session2 = store.OpenSession())
				{
					var entity = session2.Load<BaseOne>(id);
					Assert.NotNull(entity);
					Assert.Equal(name, entity.Name);
				}
			}
		}
Пример #4
0
 public WithDependencies(BaseOne baseOne, BaseTwo baseTwo, BaseThree baseThree)
 {
     BaseOne   = baseOne;
     BaseTwo   = baseTwo;
     BaseThree = baseThree;
 }
Пример #5
0
        static void Main(string[] args)
        {
            #region 枚举器
            Enumerator.Test();
            #endregion

            #region 匿名委托
            Del de = delegate(int k) { Console.WriteLine(k); };
            de(1);
            #endregion

            #region 线程

            Thread thread = new Thread(delegate()
            {
                Console.WriteLine("start");
            });

            thread.Start();
            #endregion

            #region 委托
            int i   = 1;
            Del del = delegate(int a)
            {
                i++;
                Console.WriteLine(i);
            };
            del(1);

            //lambda表达式
            Dele lam = x => x * x;
            Console.WriteLine(lam(2));

            //lambda表达式(用于表达式树)
            Expression <Dele> la = a => a * a;

            //lambda语句
            Del deOne = (aa) => { Console.WriteLine(aa); };
            deOne(6);
            #endregion

            #region 表达式树

            //创建一个表达式树中的参数,作为一个节点,这里是最下层的节点
            ParameterExpression aaa = Expression.Parameter(typeof(int), "i");
            ParameterExpression bbb = Expression.Parameter(typeof(int), "j");
            //这里i*j,生成表达式树中的一个节点,比上面节点高一级
            BinaryExpression resultOne = Expression.Multiply(aaa, bbb);

            ParameterExpression c         = Expression.Parameter(typeof(int), "w");
            ParameterExpression d         = Expression.Parameter(typeof(int), "x");
            BinaryExpression    resultTwo = Expression.Multiply(c, d);
            //运算两个中级节点,产生终结点
            BinaryExpression result = Expression.Add(resultOne, resultTwo);

            Expression <Func <int, int, int, int, int> > lambda = Expression.Lambda <Func <int, int, int, int, int> >(result, aaa, bbb, c, d);
            Console.WriteLine(lambda);

            Func <int, int, int, int, int> fu = lambda.Compile();
            Console.WriteLine(fu(1, 2, 3, 4));
            #endregion

            #region reflection
            Man  man         = new Man();
            Type manTypesTwo = man.GetType();
            Type manTypes    = typeof(Man);


            MemberInfo[]   members   = manTypes.GetMembers();
            MethodInfo[]   methods   = manTypes.GetMethods();
            FieldInfo[]    fields    = manTypes.GetFields();
            PropertyInfo[] proerties = manTypes.GetProperties();

            string mem = "";
            bool   met = false;

            foreach (MemberInfo item in members)
            {
                mem = item.Name;
            }

            foreach (MethodInfo item in methods)
            {
                met = item.IsPublic;
            }

            foreach (FieldInfo item in fields)
            {
            }

            foreach (PropertyInfo item in proerties)
            {
            }
            #endregion

            #region 算法
            //斐波那契数列
            Console.WriteLine("斐波那契数列:{0}", Algorithm.Reverse(7));
            //n!的阶乘
            Console.WriteLine("n!的阶乘:{0}", Algorithm.Factorial(5));
            //冒泡排序
            //TestOne.BubbleSort(new int[] { 5, 4, 3, 2, 1 });
            //冒泡排序2
            Algorithm.BubbleSort2(new int[] { 5, 4, 3, 2, 1 });
            #endregion

            #region 基础知识
            BaseKonwledes.EqualDifference();
            #endregion

            #region 算法
            int aaaa = 1, bbbb = 2;
            Algorithm.TwoExchange(ref aaaa, ref bbbb);

            Algorithm.FibonacciStack(7);
            #endregion

            #region 基础知识-继承
            Parent ch = new Child();
            ch.SetName("a");
            ch.GetName();

            Child cc = new Child();


            Console.WriteLine("{{0}} = {0}", 1);

            //int? ab;
            //Console.WriteLine("ab:", ab.Value);

            //Parent p;
            //Console.WriteLine("Parent:",p);
            #endregion

            #region 基础-引用类型
            Refference re   = new Refference();
            int        numA = 1;
            BaseKonwledes.Refference(re, numA);

            Console.WriteLine("re.num :{0}", re.num);
            Console.WriteLine("num :{0}", numA);


            Refference ree  = new Refference();
            int        numB = 1;
            BaseKonwledes.Refference(ref ree, ref numB);

            Console.WriteLine("re.num :{0}", ree.num);
            Console.WriteLine("num :{0}", numB);

            #endregion

            #region 基础-ref-out

            Refference myRef = new Refference();
            BaseKonwledes.MyRefAsParameter(myRef);
            Console.WriteLine("myRef :{0} ", myRef.num);

            Refference myOut;
            BaseKonwledes.MyOutAsParameter(out myOut);

            Console.WriteLine("myOut.num :{0}", myOut.num);
            #endregion

            #region 参数数组
            BaseKonwledes.ParamsArray();
            BaseKonwledes.ParamsArray(1);
            BaseKonwledes.ParamsArray(1, 2);

            #endregion

            #region 二分查找
            Console.WriteLine("二分查找");
            Console.WriteLine(Algorithm.BinarySearch(new int[] { 1, 2, 3, 4, 5 }, 4));
            Console.WriteLine(Algorithm.BinarySearch2(new int[] { 1, 2, 3, 4 }, 0, 3, 1));
            Console.WriteLine(Algorithm.Binary3(new int[] { 1, 2, 3, 4 }, 0));
            #endregion

            #region 泛型
            GenericParadigm.MyStackGeneric();
            //泛型方法、推断类型
            GenericParadigm.GenericFunctions();
            //泛型类的扩展
            GenericParadigm.GenericClassExt();
            //泛型结构
            GenericParadigm.GenericStruct();
            //泛型委托
            GenericParadigm.GenericDelegate();
            //泛型接口
            GenericParadigm.GenericInterface();
            #endregion

            #region 基础-反射

            ReflectionSyntax.ExcuteMethod();
            #endregion

            #region 反射
            Reflection.getAllTypes();
            #endregion

            #region linq
            Linq.LinqTest();
            #endregion

            #region 算法
            Algorithm.IsBracketEquals("1{2[3]4");
            #endregion

            #region base
            Algorithm.RandomAZ();

            BaseKonwledes.StringAndStringBuilder();
            #endregion

            #region 集合
            BaseOne.TestList();
            #endregion

            #region 表达式树
            ExpressionList.One();

            ExpressionList.Two();
            #endregion

            #region 引用类型
            List <string> list = new List <string>()
            {
                "1", "2", "3"
            };

            BaseOne       baseOne = new BaseOne();
            List <string> one     = baseOne.GetListOne(list);
            one.Add("4");

            List <string> two = baseOne.GetListOne(list);

            string temp = string.Empty;
            one.ForEach(f =>
            {
                temp += f + " ";
            });

            Console.WriteLine("one: {0}", temp);

            temp = string.Empty;
            two.ForEach(f =>
            {
                temp += f + " ";
            });
            Console.WriteLine("two: {0}", temp);
            #endregion
        }
Пример #6
0
 /// <summary>
 /// Gets the hashcode of the trapezoid.
 /// </summary>
 /// <returns></returns>
 public override int GetHashCode()
 {
     return(BaseOne.GetHashCode() ^ BaseTwo.GetHashCode() ^ Height.GetHashCode());
 }