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
///
public class ValueTupleStudy
{
-
+ #region 构造函数 创建值元组
+
+ ///
+ /// 创建0元素的值元组
+ ///
+ public ValueTuple CreateValueTuple()
+ {
+ var tuple = new ValueTuple();
+
+ return tuple;
+ }
+
+ ///
+ /// 创建1元素的值元组
+ ///
+ public ValueTuple CreateValueTuple(T1 value)
+ {
+ var tuple = new ValueTuple(value);
+
+ return tuple;
+ }
+
+ ///
+ /// 创建2元素的值元组
+ ///
+ public ValueTuple CreateValueTuple(T1 value1, T2 value2)
+ {
+ var tuple = new ValueTuple(value1, value2);
+
+ return tuple;
+ }
+
+ ///
+ /// 创建3元素的值元组
+ ///
+ public ValueTuple CreateValueTuple(T1 value1, T2 value2, T3 value3)
+ {
+ var tuple = new ValueTuple(value1, value2, value3);
+
+ return tuple;
+ }
+
+ ///
+ /// 创建4元素的值元组
+ ///
+ public ValueTuple CreateValueTuple(T1 value1, T2 value2, T3 value3, T4 value4)
+ {
+ var tuple = new ValueTuple(value1, value2, value3, value4);
+
+ return tuple;
+ }
+
+ ///
+ /// 创建5元素的值元组
+ ///
+ public ValueTuple CreateValueTuple(T1 value1, T2 value2, T3 value3, T4 value4, T5 value5)
+ {
+ var tuple = new ValueTuple(value1, value2, value3, value4, value5);
+
+ return tuple;
+ }
+
+ ///
+ /// 创建6元素的值元组
+ ///
+ public ValueTuple CreateValueTuple(T1 value1, T2 value2, T3 value3, T4 value4, T5 value5, T6 value6)
+ {
+ var tuple = new ValueTuple(value1, value2, value3, value4, value5, value6);
+
+ return tuple;
+ }
+
+ ///
+ /// 创建7元素的值元组
+ ///
+ public ValueTuple CreateValueTuple(T1 value1, T2 value2, T3 value3, T4 value4, T5 value5, T6 value6, T7 value7)
+ {
+ var tuple = new ValueTuple(value1, value2, value3, value4, value5, value6, value7);
+
+ return tuple;
+ }
+
+ ///
+ /// 创建8元素的值元组
+ ///
+ public ValueTuple CreateValueTuple(T1 value1, T2 value2, T3 value3, T4 value4, T5 value5, T6 value6, T7 value7, TRest restValue) where TRest : struct
+ {
+ var tuple = new ValueTuple(value1, value2, value3, value4, value5, value6, value7, restValue);
+
+ return tuple;
+ }
+ #endregion
+
+ #region 静态Create方法 创建值元组
+
+ ///
+ /// 创建0元素的值元组
+ ///
+ public ValueTuple GetValueTuple()
+ {
+ var tuple = ValueTuple.Create();
+ return tuple;
+ }
+
+ ///
+ /// 创建1元素的值元组
+ ///
+ public ValueTuple GetValueTuple(T1 item1)
+ {
+ var tuple = ValueTuple.Create(item1);
+ return tuple;
+ }
+
+ ///
+ /// 创建2元素的值元组
+ ///
+ public ValueTuple GetValueTuple(T1 item1, T2 item2)
+ {
+ var tuple = ValueTuple.Create(item1, item2);
+ return tuple;
+ }
+
+ ///
+ /// 创建3元素的值元组
+ ///
+ public ValueTuple GetValueTuple(T1 item1, T2 item2, T3 item3)
+ {
+ var tuple = ValueTuple.Create(item1, item2, item3);
+ return tuple;
+ }
+
+ ///
+ /// 创建4元素的值元组
+ ///
+ public ValueTuple GetValueTuple(T1 item1, T2 item2, T3 item3, T4 item4)
+ {
+ var tuple = ValueTuple.Create(item1, item2, item3, item4);
+ return tuple;
+ }
+
+ ///
+ /// 创建5元素的值元组
+ ///
+ public ValueTuple GetValueTuple(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5)
+ {
+ var tuple = ValueTuple.Create(item1, item2, item3, item4, item5);
+ return tuple;
+ }
+
+ ///
+ /// 创建6元素的值元组
+ ///
+ public ValueTuple GetValueTuple(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5, T6 item6)
+ {
+ var tuple = ValueTuple.Create(item1, item2, item3, item4, item5, item6);
+ return tuple;
+ }
+
+ ///
+ /// 创建7元素的值元组
+ ///
+ public ValueTuple GetValueTuple(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;
+ }
+
+ ///
+ /// 创建8元素的值元组
+ ///
+ public (T1, T2, T3, T4, T5, T6, T7, TRest) GetValueTuple(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 @@
Properties
TupleStudyTest
TupleStudyTest
- v4.6.1
+ v4.7
512
+
true
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();
}
///
/// 使用构造函数创建值元组
///
[Fact]
- public void Create_ValueTuple_Constructor_Test()
+ public void CreateValueTuple_Test()
{
//创建包含零个元组的值元组
- var zeroTuple = new ValueTuple();
+ System.ValueTuple zeroTuple = this.valueTupleStudy.CreateValueTuple();
Assert.IsType(zeroTuple);
//1个元组的值元组
- var oneTuple = new ValueTuple(1);
+ var oneTuple = valueTupleStudy.CreateValueTuple(1);
Assert.Equal(1, oneTuple.Item1);
Assert.Equal("first", new ValueTuple("first").Item1);
//2个元组的值元组
- var twoTuple = new ValueTuple(1,2);
+ var twoTuple = valueTupleStudy.CreateValueTuple(1, 2);
Assert.Equal(1, twoTuple.Item1);
Assert.Equal(2, twoTuple.Item2);
//3个元组的值元组
- var threeTuple = new ValueTuple(1,2,3);
+ var threeTuple = valueTupleStudy.CreateValueTuple(1, 2, 3);
Assert.Equal(1, threeTuple.Item1);
Assert.Equal(2, threeTuple.Item2);
Assert.Equal(3, threeTuple.Item3);
//4个元组的值元组
- var fourTuple = new ValueTuple(1,2,3,4);
+ var fourTuple = valueTupleStudy.CreateValueTuple(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(1,2,3,4,5);
+ var fiveTuple = valueTupleStudy.CreateValueTuple(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(1, 2, 3, 4, 5, 6);
+ var sixTuple = valueTupleStudy.CreateValueTuple(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(1, 2, 3, 4, 5, 6, 7);
+ var sevenTuple = valueTupleStudy.CreateValueTuple(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>(1, 2, 3, 4, 5, 6, 7, new ValueTuple(8, 9, 10));
+ var overSevenTuple = valueTupleStudy.CreateValueTuple>(1, 2, 3, 4, 5, 6, 7, new ValueTuple(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
+{
+ ///
+ /// ValueTuple 需要.net framework 4.7及以上
+ /// .net framework 4.7及以下,需要Nuget引用包System.ValueTuple 库
+ ///
+ public class ValueTupleStudyTest
+ {
+ private ValueTupleStudy valueTupleStudy;
+
+ ///
+ /// 构造函数
+ ///
+ public ValueTupleStudyTest()
+ {
+ valueTupleStudy = new ValueTupleStudy();
+ }
+
+ ///
+ /// 使用构造函数创建值元组
+ ///
+ [Fact]
+ public void CreateValueTuple_Test()
+ {
+ //创建包含零个元组的值元组
+ var zeroTuple = this.valueTupleStudy.CreateValueTuple();
+ Assert.IsType(zeroTuple);
+
+ //1个元组的值元组
+ var oneTuple = valueTupleStudy.CreateValueTuple(1);
+ Assert.Equal(1, oneTuple.Item1);
+ Assert.Equal("first", new ValueTuple("first").Item1);
+
+ //2个元组的值元组
+ var twoTuple = valueTupleStudy.CreateValueTuple(1, 2);
+ Assert.Equal(1, twoTuple.Item1);
+ Assert.Equal(2, twoTuple.Item2);
+
+ //3个元组的值元组
+ var threeTuple = valueTupleStudy.CreateValueTuple(1, 2, 3);
+ Assert.Equal(1, threeTuple.Item1);
+ Assert.Equal(2, threeTuple.Item2);
+ Assert.Equal(3, threeTuple.Item3);
+
+
+ //4个元组的值元组
+ var fourTuple = valueTupleStudy.CreateValueTuple(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(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(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(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>(1, 2, 3, 4, 5, 6, 7, new ValueTuple(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 @@
+
+
+
+
+
+
+ Debug
+ AnyCPU
+ {90707BA8-33B0-4EE7-ABF5-36303F2AAA18}
+ Library
+ Properties
+ ValueTupleStudyTest
+ ValueTupleStudyTest
+ v4.7
+ 512
+
+
+
+
+ true
+ full
+ false
+ bin\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ pdbonly
+ true
+ bin\Release\
+ TRACE
+ prompt
+ 4
+
+
+
+
+
+
+
+
+
+
+
+ ..\packages\xunit.abstractions.2.0.2\lib\net35\xunit.abstractions.dll
+
+
+ ..\packages\xunit.assert.2.4.0\lib\netstandard2.0\xunit.assert.dll
+
+
+ ..\packages\xunit.extensibility.core.2.4.0\lib\net452\xunit.core.dll
+
+
+ ..\packages\xunit.extensibility.execution.2.4.0\lib\net452\xunit.execution.desktop.dll
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {3bf11d95-1a17-444f-97a8-5536fcc8c015}
+ TupleStudy
+
+
+
+
+
+
+
+
+ 这台计算机上缺少此项目引用的 NuGet 程序包。使用“NuGet 程序包还原”可下载这些程序包。有关更多信息,请参见 http://go.microsoft.com/fwlink/?LinkID=322105。缺少的文件是 {0}。
+
+
+
+
+
+
+
\ 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 @@
+
+
+
+
+
+
+
+
+
+
+
\ 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