diff --git a/TupleStudy/ValueTupleStudy.cs b/TupleStudy/ValueTupleStudy.cs
index 8c5e5b1..189a4f2 100644
--- a/TupleStudy/ValueTupleStudy.cs
+++ b/TupleStudy/ValueTupleStudy.cs
@@ -14,6 +14,183 @@ namespace TupleStudy
     /// </summary>
     public class ValueTupleStudy
     {
-       
+        #region 构造函数 创建值元组
+
+        /// <summary>
+        /// 创建0元素的值元组
+        /// </summary>
+        public ValueTuple CreateValueTuple()
+        {
+            var tuple = new ValueTuple();
+
+            return tuple;
+        }
+
+        /// <summary>
+        /// 创建1元素的值元组
+        /// </summary>
+        public ValueTuple<T1> CreateValueTuple<T1>(T1 value)
+        {
+            var tuple = new ValueTuple<T1>(value);
+
+            return tuple;
+        }
+
+        /// <summary>
+        /// 创建2元素的值元组
+        /// </summary>
+        public ValueTuple<T1,T2> CreateValueTuple<T1,T2>(T1 value1, T2 value2)
+        {
+            var tuple = new ValueTuple<T1, T2>(value1, value2);
+
+            return tuple;
+        }
+
+        /// <summary>
+        /// 创建3元素的值元组
+        /// </summary>
+        public ValueTuple<T1, T2, T3> CreateValueTuple<T1, T2, T3>(T1 value1, T2 value2, T3 value3)
+        {
+            var tuple = new ValueTuple<T1, T2, T3>(value1, value2, value3);
+
+            return tuple;
+        }
+
+        /// <summary>
+        /// 创建4元素的值元组
+        /// </summary>
+        public ValueTuple<T1, T2, T3, T4> CreateValueTuple<T1, T2, T3, T4>(T1 value1, T2 value2, T3 value3, T4 value4)
+        {
+            var tuple = new ValueTuple<T1, T2, T3, T4>(value1, value2, value3, value4);
+
+            return tuple;
+        }
+
+        /// <summary>
+        /// 创建5元素的值元组
+        /// </summary>
+        public ValueTuple<T1, T2, T3, T4, T5> CreateValueTuple<T1, T2, T3, T4, T5>(T1 value1, T2 value2, T3 value3, T4 value4, T5 value5)
+        {
+            var tuple = new ValueTuple<T1, T2, T3, T4, T5>(value1, value2, value3, value4, value5);
+
+            return tuple;
+        }
+
+        /// <summary>
+        /// 创建6元素的值元组
+        /// </summary>
+        public ValueTuple<T1, T2, T3, T4, T5, T6> CreateValueTuple<T1, T2, T3, T4, T5, T6>(T1 value1, T2 value2, T3 value3, T4 value4, T5 value5, T6 value6)
+        {
+            var tuple = new ValueTuple<T1, T2, T3, T4, T5, T6>(value1, value2, value3, value4, value5, value6);
+
+            return tuple;
+        }
+
+        /// <summary>
+        /// 创建7元素的值元组
+        /// </summary>
+        public ValueTuple<T1, T2, T3, T4, T5, T6, T7> CreateValueTuple<T1, T2, T3, T4,T5,T6,T7>(T1 value1, T2 value2, T3 value3, T4 value4, T5 value5, T6 value6, T7 value7)
+        {
+            var tuple = new ValueTuple<T1, T2, T3, T4, T5, T6, T7>(value1, value2, value3, value4, value5, value6, value7);
+
+            return tuple;
+        }
+
+        /// <summary>
+        /// 创建8元素的值元组
+        /// </summary>
+        public ValueTuple<T1, T2, T3, T4, T5, T6, T7, TRest> CreateValueTuple<T1, T2, T3, T4, T5, T6, T7, TRest>(T1 value1, T2 value2, T3 value3, T4 value4, T5 value5, T6 value6, T7 value7, TRest restValue) where TRest : struct
+        {
+            var tuple = new ValueTuple<T1, T2, T3, T4, T5, T6, T7, TRest>(value1, value2, value3, value4, value5, value6, value7, restValue);
+
+            return tuple;
+        }
+        #endregion
+
+        #region 静态Create方法 创建值元组
+
+        /// <summary>
+        /// 创建0元素的值元组
+        /// </summary>
+        public ValueTuple GetValueTuple()
+        {
+            var tuple = ValueTuple.Create();
+            return tuple;
+        }
+
+        /// <summary>
+        /// 创建1元素的值元组
+        /// </summary>
+        public ValueTuple<T1> GetValueTuple<T1>(T1 item1)
+        {
+            var tuple = ValueTuple.Create(item1);
+            return tuple;
+        }
+
+        /// <summary>
+        /// 创建2元素的值元组
+        /// </summary>
+        public ValueTuple<T1, T2> GetValueTuple<T1, T2>(T1 item1, T2 item2)
+        {
+            var tuple = ValueTuple.Create(item1, item2);
+            return tuple;
+        }
+
+        /// <summary>
+        /// 创建3元素的值元组
+        /// </summary>
+        public ValueTuple<T1, T2, T3> GetValueTuple<T1, T2, T3>(T1 item1, T2 item2, T3 item3)
+        {
+            var tuple = ValueTuple.Create(item1, item2, item3);
+            return tuple;
+        }
+
+        /// <summary>
+        /// 创建4元素的值元组
+        /// </summary>
+        public ValueTuple<T1, T2, T3, T4> GetValueTuple<T1, T2, T3, T4>(T1 item1, T2 item2, T3 item3, T4 item4)
+        {
+            var tuple = ValueTuple.Create(item1, item2, item3, item4);
+            return tuple;
+        }
+
+        /// <summary>
+        /// 创建5元素的值元组
+        /// </summary>
+        public ValueTuple<T1, T2, T3, T4, T5> GetValueTuple<T1, T2, T3, T4, T5>(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5)
+        {
+            var tuple = ValueTuple.Create(item1, item2, item3, item4, item5);
+            return tuple;
+        }
+
+        /// <summary>
+        /// 创建6元素的值元组
+        /// </summary>
+        public ValueTuple<T1, T2, T3, T4, T5, T6> GetValueTuple<T1, T2, T3, T4, T5, T6>(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5, T6 item6)
+        {
+            var tuple = ValueTuple.Create(item1, item2, item3, item4, item5, item6);
+            return tuple;
+        }
+
+        /// <summary>
+        /// 创建7元素的值元组
+        /// </summary>
+        public ValueTuple<T1, T2, T3, T4, T5, T6, T7> GetValueTuple<T1, T2, T3, T4, T5, T6, T7>(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5, T6 item6, T7 item7)
+        {
+            var tuple = ValueTuple.Create(item1, item2, item3, item4, item5, item6, item7);
+            return tuple;
+        }
+
+        /// <summary>
+        /// 创建8元素的值元组
+        /// </summary>
+        public (T1, T2, T3, T4, T5, T6, T7, TRest) GetValueTuple<T1, T2, T3, T4, T5, T6, T7, TRest>(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5, T6 item6, T7 item7, TRest item8) where TRest:struct
+        {
+            var tuple = ValueTuple.Create(item1, item2, item3, item4, item5, item6, item7, item8);
+            return tuple;
+        }
+        #endregion
+
+
     }
 }
diff --git a/TupleStudyTest/TupleStudyTest.csproj b/TupleStudyTest/TupleStudyTest.csproj
index cb40066..efbd295 100644
--- a/TupleStudyTest/TupleStudyTest.csproj
+++ b/TupleStudyTest/TupleStudyTest.csproj
@@ -11,10 +11,11 @@
     <AppDesignerFolder>Properties</AppDesignerFolder>
     <RootNamespace>TupleStudyTest</RootNamespace>
     <AssemblyName>TupleStudyTest</AssemblyName>
-    <TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
+    <TargetFrameworkVersion>v4.7</TargetFrameworkVersion>
     <FileAlignment>512</FileAlignment>
     <NuGetPackageImportStamp>
     </NuGetPackageImportStamp>
+    <TargetFrameworkProfile />
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
     <DebugSymbols>true</DebugSymbols>
diff --git a/TupleStudyTest/ValueTupleStudyTest.cs b/TupleStudyTest/ValueTupleStudyTest.cs
index 1605ec7..f419b80 100644
--- a/TupleStudyTest/ValueTupleStudyTest.cs
+++ b/TupleStudyTest/ValueTupleStudyTest.cs
@@ -15,49 +15,49 @@ namespace TupleStudyTest
 {
     public class ValueTupleStudyTest
     {
-        private TupleStudy.ValueTupleStudy tupleStudy;
+        private ValueTupleStudy valueTupleStudy;
 
         public ValueTupleStudyTest()
         {
-            tupleStudy = new TupleStudy.ValueTupleStudy();
+            valueTupleStudy = new ValueTupleStudy();
         }
 
         /// <summary>
         /// 使用构造函数创建值元组
         /// </summary>
         [Fact]
-        public void Create_ValueTuple_Constructor_Test()
+        public void CreateValueTuple_Test()
         {
             //创建包含零个元组的值元组
-            var zeroTuple = new ValueTuple();
+            System.ValueTuple zeroTuple = this.valueTupleStudy.CreateValueTuple();
             Assert.IsType<ValueTuple>(zeroTuple);
 
             //1个元组的值元组
-            var oneTuple = new ValueTuple<int>(1);
+            var oneTuple = valueTupleStudy.CreateValueTuple<int>(1);
             Assert.Equal(1, oneTuple.Item1);
             Assert.Equal("first", new ValueTuple<string>("first").Item1);
 
             //2个元组的值元组
-            var twoTuple = new ValueTuple<int,int>(1,2);
+            var twoTuple = valueTupleStudy.CreateValueTuple<int, int>(1, 2);
             Assert.Equal(1, twoTuple.Item1);
             Assert.Equal(2, twoTuple.Item2);
 
             //3个元组的值元组
-            var threeTuple = new ValueTuple<int,int,int>(1,2,3);
+            var threeTuple = valueTupleStudy.CreateValueTuple<int, int, int>(1, 2, 3);
             Assert.Equal(1, threeTuple.Item1);
             Assert.Equal(2, threeTuple.Item2);
             Assert.Equal(3, threeTuple.Item3);
 
 
             //4个元组的值元组
-            var fourTuple = new ValueTuple<int,int,int,int>(1,2,3,4);
+            var fourTuple = valueTupleStudy.CreateValueTuple<int, int, int, int>(1, 2, 3, 4);
             Assert.Equal(1, fourTuple.Item1);
             Assert.Equal(2, fourTuple.Item2);
             Assert.Equal(3, fourTuple.Item3);
             Assert.Equal(4, fourTuple.Item4);
 
             //5个元组的值元组
-            var fiveTuple = new ValueTuple<int,int,int,int,int>(1,2,3,4,5);
+            var fiveTuple = valueTupleStudy.CreateValueTuple<int, int, int, int, int>(1, 2, 3, 4, 5);
             Assert.Equal(1, fiveTuple.Item1);
             Assert.Equal(2, fiveTuple.Item2);
             Assert.Equal(3, fiveTuple.Item3);
@@ -65,7 +65,7 @@ namespace TupleStudyTest
             Assert.Equal(5, fiveTuple.Item5);
 
             //6个元组的值元组
-            var sixTuple = new ValueTuple<int, int, int, int, int, int>(1, 2, 3, 4, 5, 6);
+            var sixTuple = valueTupleStudy.CreateValueTuple<int, int, int, int, int, int>(1, 2, 3, 4, 5, 6);
             Assert.Equal(1, sixTuple.Item1);
             Assert.Equal(2, sixTuple.Item2);
             Assert.Equal(3, sixTuple.Item3);
@@ -74,7 +74,7 @@ namespace TupleStudyTest
             Assert.Equal(6, sixTuple.Item6);
 
             //7个元组的值元组
-            var sevenTuple = new ValueTuple<int, int, int, int, int, int, int>(1, 2, 3, 4, 5, 6, 7);
+            var sevenTuple = valueTupleStudy.CreateValueTuple<int, int, int, int, int, int, int>(1, 2, 3, 4, 5, 6, 7);
             Assert.Equal(1, sevenTuple.Item1);
             Assert.Equal(2, sevenTuple.Item2);
             Assert.Equal(3, sevenTuple.Item3);
@@ -84,7 +84,7 @@ namespace TupleStudyTest
             Assert.Equal(7, sevenTuple.Item7);
 
             //8个及以上元组的值元组:元组嵌套
-            var overSevenTuple = new ValueTuple<int, int, int, int, int, int, int, ValueTuple<int, int, int>>(1, 2, 3, 4, 5, 6, 7, new ValueTuple<int, int, int>(8, 9, 10));
+            var overSevenTuple = valueTupleStudy.CreateValueTuple<int, int, int, int, int, int, int, ValueTuple<int, int, int>>(1, 2, 3, 4, 5, 6, 7, new ValueTuple<int, int, int>(8, 9, 10));
             Assert.Equal(1, overSevenTuple.Item1);
             Assert.Equal(2, overSevenTuple.Item2);
             Assert.Equal(3, overSevenTuple.Item3);
@@ -100,5 +100,11 @@ namespace TupleStudyTest
 
             //16个以上,要审视程序设计,是否确实需要使用ValueTuple,最好改成设计成类
         }
+
+        [Fact]
+        public void GetValueTuple_Test()
+        {
+
+        }
     }
 }
diff --git a/ValueTupleStudyTest/Properties/AssemblyInfo.cs b/ValueTupleStudyTest/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..df13f1b
--- /dev/null
+++ b/ValueTupleStudyTest/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// 有关程序集的一般信息由以下
+// 控制。更改这些特性值可修改
+// 与程序集关联的信息。
+[assembly: AssemblyTitle("ValueTupleStudyTest")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("ValueTupleStudyTest")]
+[assembly: AssemblyCopyright("Copyright ©  2018")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// 将 ComVisible 设置为 false 会使此程序集中的类型
+//对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型
+//请将此类型的 ComVisible 特性设置为 true。
+[assembly: ComVisible(false)]
+
+// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID
+[assembly: Guid("90707ba8-33b0-4ee7-abf5-36303f2aaa18")]
+
+// 程序集的版本信息由下列四个值组成: 
+//
+//      主版本
+//      次版本
+//      生成号
+//      修订号
+//
+// 可以指定所有值,也可以使用以下所示的 "*" 预置版本号和修订号
+//通过使用 "*",如下所示:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/ValueTupleStudyTest/ValueTupleStudyTest.cs b/ValueTupleStudyTest/ValueTupleStudyTest.cs
new file mode 100644
index 0000000..0633cb8
--- /dev/null
+++ b/ValueTupleStudyTest/ValueTupleStudyTest.cs
@@ -0,0 +1,108 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+using Xunit;
+
+using TupleStudy;
+
+namespace ValueTupleStudyTest
+{
+    /// <summary>
+    /// ValueTuple 需要.net framework 4.7及以上
+    /// .net framework 4.7及以下,需要Nuget引用包System.ValueTuple 库
+    /// </summary>
+    public class ValueTupleStudyTest
+    {
+        private ValueTupleStudy valueTupleStudy;
+
+        /// <summary>
+        /// 构造函数
+        /// </summary>
+        public ValueTupleStudyTest()
+        {
+            valueTupleStudy = new ValueTupleStudy();
+        }
+
+        /// <summary>
+        /// 使用构造函数创建值元组
+        /// </summary>
+        [Fact]
+        public void CreateValueTuple_Test()
+        {
+            //创建包含零个元组的值元组
+            var zeroTuple = this.valueTupleStudy.CreateValueTuple();
+            Assert.IsType<ValueTuple>(zeroTuple);
+
+            //1个元组的值元组
+            var oneTuple = valueTupleStudy.CreateValueTuple<int>(1);
+            Assert.Equal(1, oneTuple.Item1);
+            Assert.Equal("first", new ValueTuple<string>("first").Item1);
+
+            //2个元组的值元组
+            var twoTuple = valueTupleStudy.CreateValueTuple<int, int>(1, 2);
+            Assert.Equal(1, twoTuple.Item1);
+            Assert.Equal(2, twoTuple.Item2);
+
+            //3个元组的值元组
+            var threeTuple = valueTupleStudy.CreateValueTuple<int, int, int>(1, 2, 3);
+            Assert.Equal(1, threeTuple.Item1);
+            Assert.Equal(2, threeTuple.Item2);
+            Assert.Equal(3, threeTuple.Item3);
+
+
+            //4个元组的值元组
+            var fourTuple = valueTupleStudy.CreateValueTuple<int, int, int, int>(1, 2, 3, 4);
+            Assert.Equal(1, fourTuple.Item1);
+            Assert.Equal(2, fourTuple.Item2);
+            Assert.Equal(3, fourTuple.Item3);
+            Assert.Equal(4, fourTuple.Item4);
+
+            //5个元组的值元组
+            var fiveTuple = valueTupleStudy.CreateValueTuple<int, int, int, int, int>(1, 2, 3, 4, 5);
+            Assert.Equal(1, fiveTuple.Item1);
+            Assert.Equal(2, fiveTuple.Item2);
+            Assert.Equal(3, fiveTuple.Item3);
+            Assert.Equal(4, fiveTuple.Item4);
+            Assert.Equal(5, fiveTuple.Item5);
+
+            //6个元组的值元组
+            var sixTuple = valueTupleStudy.CreateValueTuple<int, int, int, int, int, int>(1, 2, 3, 4, 5, 6);
+            Assert.Equal(1, sixTuple.Item1);
+            Assert.Equal(2, sixTuple.Item2);
+            Assert.Equal(3, sixTuple.Item3);
+            Assert.Equal(4, sixTuple.Item4);
+            Assert.Equal(5, sixTuple.Item5);
+            Assert.Equal(6, sixTuple.Item6);
+
+            //7个元组的值元组
+            var sevenTuple = valueTupleStudy.CreateValueTuple<int, int, int, int, int, int, int>(1, 2, 3, 4, 5, 6, 7);
+            Assert.Equal(1, sevenTuple.Item1);
+            Assert.Equal(2, sevenTuple.Item2);
+            Assert.Equal(3, sevenTuple.Item3);
+            Assert.Equal(4, sevenTuple.Item4);
+            Assert.Equal(5, sevenTuple.Item5);
+            Assert.Equal(6, sevenTuple.Item6);
+            Assert.Equal(7, sevenTuple.Item7);
+
+            //8个及以上元组的值元组:元组嵌套
+            var overSevenTuple = valueTupleStudy.CreateValueTuple<int, int, int, int, int, int, int, ValueTuple<int, int, int>>(1, 2, 3, 4, 5, 6, 7, new ValueTuple<int, int, int>(8, 9, 10));
+            Assert.Equal(1, overSevenTuple.Item1);
+            Assert.Equal(2, overSevenTuple.Item2);
+            Assert.Equal(3, overSevenTuple.Item3);
+            Assert.Equal(4, overSevenTuple.Item4);
+            Assert.Equal(5, overSevenTuple.Item5);
+            Assert.Equal(6, overSevenTuple.Item6);
+            Assert.Equal(7, overSevenTuple.Item7);
+
+            //元组嵌套
+            Assert.Equal(8, overSevenTuple.Item8);
+            Assert.Equal(9, overSevenTuple.Item9);
+            Assert.Equal(10, overSevenTuple.Item10);
+
+            //16个以上,要审视程序设计,是否确实需要使用ValueTuple,最好改成设计成类
+        }
+    }
+}
diff --git a/ValueTupleStudyTest/ValueTupleStudyTest.csproj b/ValueTupleStudyTest/ValueTupleStudyTest.csproj
new file mode 100644
index 0000000..dee134a
--- /dev/null
+++ b/ValueTupleStudyTest/ValueTupleStudyTest.csproj
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="..\packages\xunit.runner.visualstudio.2.4.0\build\net20\xunit.runner.visualstudio.props" Condition="Exists('..\packages\xunit.runner.visualstudio.2.4.0\build\net20\xunit.runner.visualstudio.props')" />
+  <Import Project="..\packages\xunit.core.2.4.0\build\xunit.core.props" Condition="Exists('..\packages\xunit.core.2.4.0\build\xunit.core.props')" />
+  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProjectGuid>{90707BA8-33B0-4EE7-ABF5-36303F2AAA18}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>ValueTupleStudyTest</RootNamespace>
+    <AssemblyName>ValueTupleStudyTest</AssemblyName>
+    <TargetFrameworkVersion>v4.7</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <NuGetPackageImportStamp>
+    </NuGetPackageImportStamp>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Net.Http" />
+    <Reference Include="System.Xml" />
+    <Reference Include="xunit.abstractions, Version=2.0.0.0, Culture=neutral, PublicKeyToken=8d05b1bb7a6fdb6c, processorArchitecture=MSIL">
+      <HintPath>..\packages\xunit.abstractions.2.0.2\lib\net35\xunit.abstractions.dll</HintPath>
+    </Reference>
+    <Reference Include="xunit.assert, Version=2.4.0.4049, Culture=neutral, PublicKeyToken=8d05b1bb7a6fdb6c, processorArchitecture=MSIL">
+      <HintPath>..\packages\xunit.assert.2.4.0\lib\netstandard2.0\xunit.assert.dll</HintPath>
+    </Reference>
+    <Reference Include="xunit.core, Version=2.4.0.4049, Culture=neutral, PublicKeyToken=8d05b1bb7a6fdb6c, processorArchitecture=MSIL">
+      <HintPath>..\packages\xunit.extensibility.core.2.4.0\lib\net452\xunit.core.dll</HintPath>
+    </Reference>
+    <Reference Include="xunit.execution.desktop, Version=2.4.0.4049, Culture=neutral, PublicKeyToken=8d05b1bb7a6fdb6c, processorArchitecture=MSIL">
+      <HintPath>..\packages\xunit.extensibility.execution.2.4.0\lib\net452\xunit.execution.desktop.dll</HintPath>
+    </Reference>
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="ValueTupleStudyTest.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="packages.config" />
+  </ItemGroup>
+  <ItemGroup>
+    <Analyzer Include="..\packages\xunit.analyzers.0.10.0\analyzers\dotnet\cs\xunit.analyzers.dll" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\TupleStudy\TupleStudy.csproj">
+      <Project>{3bf11d95-1a17-444f-97a8-5536fcc8c015}</Project>
+      <Name>TupleStudy</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
+    <PropertyGroup>
+      <ErrorText>这台计算机上缺少此项目引用的 NuGet 程序包。使用“NuGet 程序包还原”可下载这些程序包。有关更多信息,请参见 http://go.microsoft.com/fwlink/?LinkID=322105。缺少的文件是 {0}。</ErrorText>
+    </PropertyGroup>
+    <Error Condition="!Exists('..\packages\xunit.core.2.4.0\build\xunit.core.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\xunit.core.2.4.0\build\xunit.core.props'))" />
+    <Error Condition="!Exists('..\packages\xunit.core.2.4.0\build\xunit.core.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\xunit.core.2.4.0\build\xunit.core.targets'))" />
+    <Error Condition="!Exists('..\packages\xunit.runner.visualstudio.2.4.0\build\net20\xunit.runner.visualstudio.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\xunit.runner.visualstudio.2.4.0\build\net20\xunit.runner.visualstudio.props'))" />
+  </Target>
+  <Import Project="..\packages\xunit.core.2.4.0\build\xunit.core.targets" Condition="Exists('..\packages\xunit.core.2.4.0\build\xunit.core.targets')" />
+</Project>
\ No newline at end of file
diff --git a/ValueTupleStudyTest/packages.config b/ValueTupleStudyTest/packages.config
new file mode 100644
index 0000000..5d9b8dc
--- /dev/null
+++ b/ValueTupleStudyTest/packages.config
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<packages>
+  <package id="xunit" version="2.4.0" targetFramework="net47" />
+  <package id="xunit.abstractions" version="2.0.2" targetFramework="net47" />
+  <package id="xunit.analyzers" version="0.10.0" targetFramework="net47" />
+  <package id="xunit.assert" version="2.4.0" targetFramework="net47" />
+  <package id="xunit.core" version="2.4.0" targetFramework="net47" />
+  <package id="xunit.extensibility.core" version="2.4.0" targetFramework="net47" />
+  <package id="xunit.extensibility.execution" version="2.4.0" targetFramework="net47" />
+  <package id="xunit.runner.visualstudio" version="2.4.0" targetFramework="net47" developmentDependency="true" />
+</packages>
\ No newline at end of file
diff --git a/元组学习.sln b/元组学习.sln
index 616c273..b8f35d8 100644
--- a/元组学习.sln
+++ b/元组学习.sln
@@ -3,10 +3,12 @@ Microsoft Visual Studio Solution File, Format Version 12.00
 # Visual Studio 15
 VisualStudioVersion = 15.0.27428.2043
 MinimumVisualStudioVersion = 10.0.40219.1
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TupleStudy", "TupleStudy\TupleStudy.csproj", "{3BF11D95-1A17-444F-97A8-5536FCC8C015}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TupleStudy", "TupleStudy\TupleStudy.csproj", "{3BF11D95-1A17-444F-97A8-5536FCC8C015}"
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TupleStudyTest", "TupleStudyTest\TupleStudyTest.csproj", "{D8CBDB9A-3EDA-4A6B-BB13-E7765B63717E}"
 EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ValueTupleStudyTest", "ValueTupleStudyTest\ValueTupleStudyTest.csproj", "{90707BA8-33B0-4EE7-ABF5-36303F2AAA18}"
+EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Debug|Any CPU = Debug|Any CPU
@@ -21,6 +23,10 @@ Global
 		{D8CBDB9A-3EDA-4A6B-BB13-E7765B63717E}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{D8CBDB9A-3EDA-4A6B-BB13-E7765B63717E}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{D8CBDB9A-3EDA-4A6B-BB13-E7765B63717E}.Release|Any CPU.Build.0 = Release|Any CPU
+		{90707BA8-33B0-4EE7-ABF5-36303F2AAA18}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{90707BA8-33B0-4EE7-ABF5-36303F2AAA18}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{90707BA8-33B0-4EE7-ABF5-36303F2AAA18}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{90707BA8-33B0-4EE7-ABF5-36303F2AAA18}.Release|Any CPU.Build.0 = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE