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