相关疑难解决方法(0)

如何用out参数编写异步方法?

我想用out参数编写一个异步方法,如下所示:

public async void Method1()
{
    int op;
    int result = await GetDataTaskAsync(out op);
}
Run Code Online (Sandbox Code Playgroud)

我该怎么办GetDataTaskAsync

c# async-await

148
推荐指数
9
解决办法
8万
查看次数

如何插入字符串?

我想在C#中做以下事情(来自Python背景):

strVar = "stack"
mystr  = "This is %soverflow" % (strVar)
Run Code Online (Sandbox Code Playgroud)

如何用字符串外的值替换字符串中的标记?

c# string string-interpolation

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

C#7元组和lambda

使用新的c#7元组语法,是否可以指定一个带有元组作为参数的lambda并在lambda中使用解压缩的值?

例:

var list = new List<(int,int)>();
Run Code Online (Sandbox Code Playgroud)

在lambda中使用元组的常规方法:

list.Select(value => value.Item1*2 + value.Item2/2);
Run Code Online (Sandbox Code Playgroud)

我期待一些新的糖可以避免.Item1 .Item2,例如:

list.Select((x,y) => x*2 + y/2);
Run Code Online (Sandbox Code Playgroud)

最后一行不起作用,因为它被视为lambda的两个参数.我不确定是否有办法实际做到这一点.

编辑:

我尝试在lambda定义中进行双重注射,但它不起作用((x,y)) => ...,并且尝试可能是愚蠢的,但是双括号实际上在这里工作:

list.Add((1,2));
Run Code Online (Sandbox Code Playgroud)

另外,我的问题并不是关于避免丑陋的默认名称.Item .Item2,而是关于实际解压缩lambda中的元组(也许是为什么它没有实现或不可能).如果您来这里寻找默认名称的解决方案,请阅读Sergey Berezovskiy的回答.

编辑2:

刚想到一个更通用的用例:是否有可能(或者为什么不)将"解构"传递给方法的元组?像这样:

void Foo((int,int)(x,y)) { x+y; }
Run Code Online (Sandbox Code Playgroud)

而不是这个:

void Foo((int x,int y) value) { value.x+value.y }
Run Code Online (Sandbox Code Playgroud)

c# lambda tuples c#-7.0

56
推荐指数
4
解决办法
9623
查看次数

C#中列表中的多个参数.如何在没有课程的情况下创作?

这可能是一个非常明显的问题,但是如何在List不创建类的情况下创建具有多个参数的问题.

例:

var list = new List<string, int>();

list.Add("hello", 1);
Run Code Online (Sandbox Code Playgroud)

我通常会使用这样的类:

public class MyClass
{
    public String myString {get; set;}
    public Int32 myInt32 {get; set;}
}
Run Code Online (Sandbox Code Playgroud)

然后创建我的列表:

var list = new List<MyClass>();
list.Add(new MyClass { myString = "hello", myInt32 = 1 });
Run Code Online (Sandbox Code Playgroud)

c# class list

50
推荐指数
5
解决办法
12万
查看次数

将匿名类型转换为新的C#7元组类型

C#的新版本就在那里,有了新的功能元组类型:

public IQueryable<T> Query<T>();

public (int id, string name) GetSomeInfo() {
    var obj = Query<SomeType>()
        .Select(o => new {
            id = o.Id,
            name = o.Name,
        })
        .First();

    return (id: obj.id, name: obj.name);
}
Run Code Online (Sandbox Code Playgroud)

有没有办法将我的匿名类型对象obj转换为我想要返回的元组而没有按属性映射属性(假设属性的名称匹配)?

上下文在ORM中,我的SomeType对象有很多其他属性,它被映射到包含大量列的表.我想做一个只带来ID和NAME的查询,所以我需要将匿名类型转换为元组,或者我需要ORM Linq Provider知道如何理解元组并将属性相关列放在SQL select子句中.

linq-to-entities tuples anonymous-types linq-to-nhibernate c#-7.0

30
推荐指数
3
解决办法
2万
查看次数

使用new创建名称ValueTuple属性

我知道我可以在创建一个隐式的元组时命名参数:

var me = (age: 21, favoriteFood: "Custard");
Run Code Online (Sandbox Code Playgroud)

是否可以在显式创建元组时命名参数?即

var me = new ValueTuple<int, string>(21, "Custard");
Run Code Online (Sandbox Code Playgroud)

.net c# c#-7.0

19
推荐指数
1
解决办法
7921
查看次数

如何命名元组属性?

如何和"可能"组织从返回元组类型的方法返回与参数的名称,作为一个exapmle

private static Tuple<string, string> methodTuple()
{
    return new {Name = "Nick", Age = "Twenty"}; /*exception because need to new Tuple<string, string>(){Item1 = "Nick", Item2 = "Twenty"}o*/
}
Run Code Online (Sandbox Code Playgroud)

和调用参数 methodTuple.Name不喜欢methodTuple.Item1....N

这可能吗?

UPD:我想用没有新命名类型的命名参数创建对象.

c# tuples

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

如何在C#中返回命名元组?

我有一个属性,返回两个类型的项目DateTime.返回这些值时,我必须将它们作为Item1和引用Item2.如何使用自定义名称返回,例如

filter?.DateRanges.From
filter?.DateRanges.To
Run Code Online (Sandbox Code Playgroud)

 

public Tuple<DateTime, DateTime> DateRanges
{
    get
    {
        From = DateTime.Now.AddDays(-1).Date.AddMonths(-1);
        To = DateTime.Now.AddDays(-1).Date;

        if (Preset != 0)
        {
            if (Preset == DatePreset.SpecificRange)
            {
                From = From.Date;
                To = To.Date;
            }
            else
            {
                var dateRange = DateTime.Today.AddDays(-1).GetDateRangeByPreset(Preset);
                From = dateRange.From;
                To = dateRange.To;
            }
        }

        return new Tuple<DateTime, DateTime>(From, To);
    }
Run Code Online (Sandbox Code Playgroud)

用法:

var from = filter?.DateRanges.Item1;
var to = filter?.DateRanges.Item2;
Run Code Online (Sandbox Code Playgroud)

c# datetime tuples get set

7
推荐指数
1
解决办法
7239
查看次数

从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
查看次数

为什么我们不能给元组中的属性命名?

是否有一个特定的原因,我们必须将元组中的属性称为Item1,Item2等.这对我来说似乎是一个坏主意,因为它们很容易混淆在你的代码中.能够为您的物业命名是不是更有意义,即.红色,绿色,蓝色?

c# tuples

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