【发布时间】:2019-06-10 03:40:22
【问题描述】:
我在解决方案中有多个项目,都针对 4.7.2。然后我在一个返回 valueTuple 的 lib 项目中添加一个方法。多个项目调用此方法,除一个项目外,所有项目都可以正常(编译)。这一项目产生编译器错误。
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?)
我已经将这个项目中的所有 nugets pkgs 与其他项目进行了比较,差异很小,然后我取消了那些不同的 nugets,仍然是同样的错误。我四处搜索,知道 4.7 已经内置了 valuetuple,然后我检查了这个项目,它没有 System.ValueTuple nuget 或硬编码的 System.ValueTuple.dll 任何地方。
请帮忙。我总是可以回到 Tuple 方式,但 valuetuple 更干净。除非你告诉我还有更多隐藏的问题。
谢谢!
The method that returns valuetuple
public static async Task<(IEnumerable<User> CreatedUsers, Dictionary<string, string> ErrorMsgsA, Dictionary<string, string> ErrorMsgsB)> CreateNewUsers(string param1, CreateUserDTO param2)
{
... ...
... ...
return (createdUs, ErrorMsgs_a, ErrorMsgs_b);
}
导致错误的行:
var createUserResult = await CreateNewUsers(param1, param2);
var created = createUserResult.CreatedUsers; //error
就是这样,编译器抱怨在返回的元组中找不到项目。我在这里列出了编译器错误,它抱怨 valuetuple 中的第一项“CreatedUsers”。实际上,每个其他值元组项“ErrorMsgsA”、ErrorMsgsB 都有一个编译器错误。请记住,我在这个 valuetuple 中引用项目的其他项目都很好,没有错误。
【问题讨论】:
-
在什么代码中报告了这个错误?这是完整且正确的错误信息吗?
-
当我发布问题时,我更新了 err msg,试图隐藏类名,这会导致一些混乱,err msg 应该是 Error CS1061 'ValueTuple
, Dictionary , Dictionary >' 不包含 'CreatedUsers' 的定义,并且没有扩展方法 'CreatedUsers' 接受类型为 'ValueTuple , Dictionary , Dictionary 的第一个参数 >' 可以找到(您是否缺少 using 指令或程序集引用?)代码行错误:“var created = createUserResult.CreatedUsers;” -
我更新了原帖,以减少混乱
-
再次检查您的代码。你确定你没有
var created = createUserResult.CreatedUsers();? -
不,我不知道。它是 var created = createUserResult.CreatedUsers
标签: c# .net valuetuple