ValueTuples可以与.net 4.5.2一起使用吗?

2uluyalo  于 2023-11-20  发布在  .NET
关注(0)|答案(2)|浏览(92)

我有一个针对.net framework 4.52的MVC 5项目,我通过Nuget安装了System.ValueTuple。我在Windows 7上使用Visual Studio 2017。在开发过程中,Visual Studio不会抱怨Tuple返回类型,但当我构建时,我会得到一个错误数组:

error CS1519: Invalid token '(' in class, struct, or interface member declaration
error CS1519: Invalid token ',' in class, struct, or interface member declaration
error CS1519: Invalid token ')' in class, struct, or interface member declaration
error CS1520: Method must have a return type
error CS1026: ) expected
and more..

字符串
这是一个正在打破的方法:

public (bool, string) GetSettings()
{
    if (settingsFile.IsNullOrEmpty())
        throw new Exception("Settings file is null or empty!");
    try
    {
        var definition = new { active = false, excludeList = "" };
        var obj = JsonConvert.DeserializeAnonymousType(settingsFile, definition);
        return (obj.active, obj.excludeList);
    }
    catch
    {
        //TODO: log exception.
        return (false, string.Empty);
    }
}


我不知道如何解决这个问题,除了认为它与我的框架版本不兼容。几次广泛的在线搜索都没有发现这个问题。

bzzcjhmw

bzzcjhmw1#

在William Xitaras对这个问题的评论中提到的MSDN博客链接已经有了快速的答案。
blog上读这段话:
请注意,如果您在项目中看不到可用的ValueTuple,则必须将System.ValueTuple 4.3.0 NuGet包下载到项目中。如果您使用的是.NET Framework 4.7或更高版本,或者.NET Standard Library 2.0或更高版本,则无需执行任何操作。
因此,在.NET Framework v4.7之前,您不能直接将该System.ValueTuple nuget用于.NET Framework,因为您必须首先满足某些要求。为了确保它可以工作,您必须:
1.确保您的C#项目属性已设置为使用正确版本的C#编译器,至少为C# 7.0。请参见下面的屏幕截图。
1.使用System.ValueTuple至少4.4.0版本,因为4.4.0之前的版本不再支持,因此建议使用至少4.4.0版本。
要设置要使用的C#编译器版本,请转到项目属性,选择“Build”选项卡,单击Advanced按钮。可用的C#编译器列表将在我的VS 2017上显示如下截图:


的数据
如果将目标更改为.NET Framework 4.7或更高版本,则不应使用System.ValueTuple nuget,因为它在.NET Framework 4.7的运行时中可用。

cwtwac6a

cwtwac6a2#

我刚刚在一个.NET452项目中使用了Tuple。你需要将该方法更改为:

public Tuple<bool, string> GetSettings()

字符串
和return语句:

return new Tuple<bool, string>(false, string.Empty);


要获取值,请使用:用途:

var resultPair = GetSettings();
bool a = resultPair.Item1;
string b = resultPair.Item2;

相关问题