相关疑难解决方法(0)

如何从C#中的函数返回多个值?

我阅读了这个问题C++版本,但并没有真正理解它.

有人可以清楚地解释一下是否可以做到以及如何做?

c# return

391
推荐指数
17
解决办法
64万
查看次数

无法从使用Visual Studio 2017和C#7.0的方法返回Tuple

我已经安装了一周前发布的Visual Studio 2017社区,我开始探索C#7的新功能.

所以我创建了一个返回两个值的简单方法:

public class Program
{
    public static void Main(string[] args)
    {
        (int sum, int count) a = ReturnTwoValues();
    }

    static (int sum, int count) ReturnTwoValues() => (1, 1);
}
Run Code Online (Sandbox Code Playgroud)

编译器生成错误:

错误CS8137无法定义使用元组的类或成员,因为无法找到编译器所需类型"System.Runtime.CompilerServices.TupleElementNamesAttribute".你错过了参考吗?

我试着用这个名字在框架中找到一个引用,但没有运气!

如果我们需要额外的东西来使用C#7.0功能,那么我们需要为每个项目做到这一点非常奇怪吗?

.net c# visual-studio c#-7.0 visual-studio-2017

87
推荐指数
4
解决办法
2万
查看次数

C#中使用MultiDimensional键的Hashtable

我基本上是在寻找一种方法来使用c#中的二维类型键来访问哈希表值.

最终我可以做这样的事情

HashTable[1][false] = 5;
int a = HashTable[1][false];
//a = 5
Run Code Online (Sandbox Code Playgroud)

这就是我一直在尝试的......没有用

Hashtable test = new Hashtable();
test.Add(new Dictionary<int, bool>() { { 1, true } }, 555);
Dictionary<int, bool> temp = new Dictionary<int, bool>() {{1, true}};
string testz = test[temp].ToString(); 
Run Code Online (Sandbox Code Playgroud)

c# dictionary hashtable

62
推荐指数
7
解决办法
7万
查看次数

如何在C#7中返回多个值?

一个队友告诉我,在C#7.0中,可能会从本机返回多个值.任何人都能提供一些例子吗?谢谢

.net c# c#-7.0

56
推荐指数
2
解决办法
7万
查看次数

在字典中解构foreach

在C#7中是否可以在字典中的foreach循环中使用解构?像这样的东西:

var dic = new Dictionary<string, int>{ ["Bob"] = 32, ["Alice"] = 17 };
foreach (var (name, age) in dic)
{
    Console.WriteLine($"{name} is {age} years old.");
}
Run Code Online (Sandbox Code Playgroud)

它似乎不适用于Visual Studio 2017 RC4和.NET Framework 4.6.2:

错误CS1061:'KeyValuePair'不包含'Deconstruct'的定义,并且没有扩展方法'Deconstruct'可以找到接受类型'KeyValuePair'的第一个参数(你是否缺少using指令或汇编引用?)

c#-7.0

32
推荐指数
3
解决办法
7062
查看次数

C#7 ValueTuple编译错误

我正在使用VS2017 RC,我的应用程序以net framework 4.6.1为目标.

我有两个引用System.ValueTuple 4.3的程序集

MyProject.Services MyProject.WebApi

在MyProject.Services中,我有一个类,有这样的方法

public async Task<(int fCount, int cCount, int aCount)> GetAllStatsAsync()
{
    // Some code...
    return (fCount, cCount, aCount);
}
Run Code Online (Sandbox Code Playgroud)

在MyProject.WebApi中,我有一个使用此方法的控制器:

public async Task<HttpResponseMessage> GetInfoAsync()
{
    // Some code...
    var stats = await _myClass.GetAllStatsAsync();

    var vm = new ViewModel
             {
                 FCount = stats.fCount,
                 CCount = stats.cCount,
                 ACount = stats.aCount
             };

     return Request.CreateResponse(HttpStatusCode.OK, vm);
}
Run Code Online (Sandbox Code Playgroud)

Intellisense正在工作并解构元组,但是当我编译它时失败而没有错误列表窗口中的任何错误.在输出窗口中我有这个错误:

2> MyController.cs(83,31,83,40):错误CS1061:'ValueTuple'不包含'fCount'的定义,并且没有扩展方法'fCount'接受类型'ValueTuple'的第一个参数可以找到(你错过了using指令或程序集引用吗?)2> MyController.cs(84,39,84,49):错误CS1061:'ValueTuple'不包含'cCount'的定义,也没有扩展方法'cCount'接受可以找到类型为'ValueTuple'的第一个参数(你是否缺少using指令或汇编引用?)2> MyController.cs(85,35,85,40):错误CS1061:'ValueTuple'不包含定义对于'aCount'并且没有扩展方法'aCount'可以找到接受类型'ValueTuple'的第一个参数(你是否缺少using指令或汇编引用?)

我尝试添加DEMODEMO_EXPERIMENTAL构建标志但仍然失败.

什么是错的?

编辑1:

此代码有效,统计数据解析得很好.我可能遇到了一个bug.

public async Task<HttpResponseMessage> GetInfoAsync()
{
    // …
Run Code Online (Sandbox Code Playgroud)

c# c#-7.0

31
推荐指数
1
解决办法
4693
查看次数

无法加载文件或程序集"System.ValueTuple,Version = 0.0.0.0"或其依赖项之一

我尝试将我的项目更新为.NET Standard 2.0,在测试期间我遇到了异常:

System.IO.FileLoadException:'无法加载文件或程序集"System.ValueTuple,Version = 0.0.0.0,Culture = neutral,PublicKeyToken = cc7b13ffcd2ddd51"或其依赖项之一.找到的程序集清单的定义与程序集的引用不匹配.

这是package.config中存在的assambly 并存在于包的文件夹中.我尝试了一些版本的System.ValueTuple包,结果是一个.

为什么依赖的版本«0.0.0.0»?

有没有人对这个问题有所了解?

VS 2017 Preview,UnitTestApp,.NET Framework 4.7.

在单元测试应用程序中,我创建EF模型(Microsoft.EntityFrameworkCore,Microsoft.EntityFrameworkCore.SqlServer 2.0.0-preview2-final,它需要在.NET Standard应用程序中).Unit测试方法 - 使用EF db模型在表中插入一些行,然后调用'savechanges',然后抛出此异常.

当我使用EntityFrameworkCore 1.1.2(带有EF模型的dll - 标准1.4,单元测试框架4.6.2)时 - 这个测试运行良好.

.net-standard

21
推荐指数
2
解决办法
1万
查看次数

升级到.NET 4.7后,"未定义或导入预定义类型System.ValueTuple"

我正在将现有的解决方案从.NET 4.6.2升级到.NET 4.7.此解决方案依赖于几个针对.NET 4.6.2的nuget包,因此依赖于nuget System.ValueTuple包.

但升级后,我收到了大量这些构建错误:

Error CS8179 Predefined type 'System.ValueTuple`2' is not defined or imported

我无法取出System.ValueTuple包,在评论中建议在这里,因为其他软件包依赖于它.(如果我强迫它,它们似乎会爆炸.)

有什么建议?

更新8/8/17

我已经发现我可以删除System.ValueTuple包,我可以通过这种方式获得编译解决方案.但是,我在解决方案中有十几个NuGet包似乎是针对.NET 4.6.2,因此需要System.ValueTuple作为依赖.我可以安装它们,然后强制删除System.ValueTuple软件包,但是如果这些软件包中的任何软件包有更新,并且我安装了更新 - 那么System.ValueTuple软件包将再次安装,系统将停止构建,直到我再次删除软件包.

换句话说,我可以做到这一切 - 但它似乎很尴尬和kludgy.当然有更好的方法来解决这个问题吗?

.net c# nuget

21
推荐指数
1
解决办法
9256
查看次数

是否可以将List绑定到WinForms中的ListView?

我想将ListView绑定到List<string>.我正在使用此代码:

somelistview.DataBindings.Add ("Items", someclass, "SomeList");
Run Code Online (Sandbox Code Playgroud)

我收到此异常:无法绑定到属性'Items',因为它是只读的.

如果Items属性是只读的,我不知道如何绑定?

c# data-binding winforms

12
推荐指数
2
解决办法
4万
查看次数

从C#异步方法返回多个值

我使用异步方法和分别返回多个值的方法。在这种特定情况下,以下“ GetTaskTypeAndId()”方法应异步并应同时返回多个值。如何使该方法异步?

        public async Task DeleteSchoolTask(int schoolNumber, int taskDetailId)
        {  
            var result = GetTaskTypeAndId(taskDetailId); // This should be called asynchronously
            int taskId = result.Item1;
            string taskType = result.Item2;

            // step 1: delete attachment physically from server
            var fileService = new FileService(Logger, CurrentUser);
            var relativeFilePath = $"{schoolNumber}\\{Consts.RM_SCHOOL}\\{taskDetailId}";
            fileService.DeleteAttachmentFolderFromServer(Consts.CONFIG_SMP_UPLOADFILE_ROOTPATH, relativeFilePath);

            // step 2: delete records from database
            await _routineMaintenanceRepo.Value.DeleteSchoolTask(taskDetailId);
        }


        public (int, string) GetTaskTypeAndId(int taskDetailId) // How should I write this line using 'async Task'?
        {
            var detailRecord = await _routineMaintenanceRepo.Value.GetDetailRecord(taskDetailId);

            int …
Run Code Online (Sandbox Code Playgroud)

asynchronous return-value async-await entity-framework-core c#-7.0

6
推荐指数
2
解决办法
5477
查看次数