我想用out参数编写一个异步方法,如下所示:
public async void Method1()
{
int op;
int result = await GetDataTaskAsync(out op);
}
Run Code Online (Sandbox Code Playgroud)
我该怎么办GetDataTaskAsync?
我想在C#中做以下事情(来自Python背景):
strVar = "stack"
mystr = "This is %soverflow" % (strVar)
Run Code Online (Sandbox Code Playgroud)
如何用字符串外的值替换字符串中的标记?
使用新的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) 这可能是一个非常明显的问题,但是如何在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#的新版本就在那里,有了新的功能元组类型:
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
我知道我可以在创建一个隐式的元组时命名参数:
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) 如何和"可能"组织从返回元组类型的方法返回与参数的名称,作为一个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:我想用没有新命名类型的命名参数创建对象.
我有一个属性,返回两个类型的项目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) 我使用异步方法和分别返回多个值的方法。在这种特定情况下,以下“ 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
是否有一个特定的原因,我们必须将元组中的属性称为Item1,Item2等.这对我来说似乎是一个坏主意,因为它们很容易混淆在你的代码中.能够为您的物业命名是不是更有意义,即.红色,绿色,蓝色?
c# ×8
tuples ×5
c#-7.0 ×4
async-await ×2
.net ×1
asynchronous ×1
class ×1
datetime ×1
get ×1
lambda ×1
list ×1
return-value ×1
set ×1
string ×1