C# valuetuple不';我的4.7.2项目之一没有工作
我在解决方案中有多个项目,都以4.7.2为目标。然后,我在lib项目中添加了一个返回valueTuple的方法。多个项目调用此方法,除一个项目外,所有项目都可以正常(编译)。此项目生成编译器错误C# valuetuple不';我的4.7.2项目之一没有工作,c#,.net,valuetuple,C#,.net,Valuetuple,我在解决方案中有多个项目,都以4.7.2为目标。然后,我在lib项目中添加了一个返回valueTuple的方法。多个项目调用此方法,除一个项目外,所有项目都可以正常(编译)。此项目生成编译器错误 Error CS1061 ValueTuple<IEnumerable<User>, Dictionary<string, string>, Dictionary<string, string>>' does not contain a defini
Error CS1061 ValueTuple<IEnumerable<User>, Dictionary<string, string>, Dictionary<string, string>>' does not contain a definition for 'CreatedUsers' and no extension method 'CreatedUsers' accepting a first argument of type 'ValueTuple<IEnumerable<User>, Dictionary<string, string>, Dictionary<string, string>>' could be found (are you missing a using directive or an assembly reference?)
导致错误的行:
var createUserResult = await CreateNewUsers(param1, param2);
var created = createUserResult.CreatedUsers; //error
就是这样,编译器抱怨在返回的元组中找不到项。我在这里列出了编译器错误,它抱怨valuetuple中的第一项“CreatedUsers”。实际上,其他valuetuple项中的每一项都有一个编译器错误,“ErrorMsgsA”,ErrorMsgsB。请记住,我的其他项目在这个valuetuple中引用了ITME,它们都很好,没有错误。您的方法签名在声明valuetuple时有语法错误。因为在泛型类型声明(如
Task
)中不能有ValueTuple属性名初始化。ValueTuple中所有声明的属性名称必须具有具体类型
将您的方法签名更改为:
public static async Task<(IEnumerable<T1> CreatedUsers, Dictionary<string, string> ErrorMsgsA, Dictionary<string, string> ErrorMsgsB)> CreateNewUsers(string param1, dtotype param2)
然后您可以编译代码。您的方法签名在声明ValueTuple时出现语法错误。因为在泛型类型声明(如
Task
)中不能有ValueTuple属性名初始化。ValueTuple中所有声明的属性名称必须具有具体类型
将您的方法签名更改为:
public static async Task<(IEnumerable<T1> CreatedUsers, Dictionary<string, string> ErrorMsgsA, Dictionary<string, string> ErrorMsgsB)> CreateNewUsers(string param1, dtotype param2)
然后你就可以编译你的代码了。好吧,我找到了原因 问题项目正在使用旧的编译器 我不得不删除两个包,这两个包已经存在多年了,很可能是我们购买的源代码。这些年来,我们一直在使用由如此古老的编译器编译的软件,这让我汗流浃背,但事实就是这样: Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.0 Microsoft.Net.Compilers.1.0.0
现在问题解决了 好吧,我找到原因了 问题项目正在使用旧的编译器 我不得不删除两个包,这两个包已经存在多年了,很可能是我们购买的源代码。这些年来,我们一直在使用由如此古老的编译器编译的软件,这让我汗流浃背,但事实就是这样: Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.0 Microsoft.Net.Compilers.1.0.0
现在问题解决了 元组没有属性,它们有命名值。错误与值的名称无关,而是与未声明的类型参数
T
有关。T1是一个具体类型,而不是泛型类型。我只是用T1替换了实际的类名称元组,它们没有属性,而是有命名值。错误与值的名称无关,而是与未声明的类型参数T
有关。T1是一个具体类型,而不是泛型类型。我只是用T1替换了实际的类名,在什么代码中报告了这个错误?这是完整正确的错误消息吗?当我发布问题时,我更新了err msg,试图隐藏类名,这导致了一些混乱,err msg should be Error CS1061'ValueTuple'不包含'CreatedUsers'的定义,并且找不到接受'ValueTuple'类型的第一个参数的扩展方法'CreatedUsers'(是否缺少using指令或程序集引用?)代码行错误:“var created=createUserResult.CreatedUsers;”我更新了原来的帖子,以减少混乱再次检查你的代码。您确定没有创建var=createUserResult.CreatedUsers()代码>?不,我不知道。它是var created=createUserResult.CreatedUsersIn报告此错误的代码是什么?这是完整正确的错误消息吗?当我发布问题时,我更新了err msg,试图隐藏类名,这导致了一些混乱,err msg should be Error CS1061'ValueTuple'不包含'CreatedUsers'的定义,并且找不到接受'ValueTuple'类型的第一个参数的扩展方法'CreatedUsers'(是否缺少using指令或程序集引用?)代码行错误:“var created=createUserResult.CreatedUsers;”我更新了原来的帖子,以减少混乱再次检查你的代码。您确定没有创建var=createUserResult.CreatedUsers()代码>?不,我不知道。它是var created=createUserResult.CreatedUsers
public static async Task<ValueTuple<IEnumerable<T1>, Dictionary<string, string>, Dictionary<string, string>> CreateNewUsers(string param1, dtotype param2)
public static async Task<(IEnumerable<Object> CreatedUsers, Dictionary<string, string> ErrorMsgsA, Dictionary<string, string> ErrorMsgsB)> CreateNewUsers(string param1, dtotype param2)