小编elm*_*007的帖子

创建空的 IAsyncEnumerable

我有一个这样写的界面:

public interface IItemRetriever
{
    public IAsyncEnumerable<string> GetItemsAsync();
}
Run Code Online (Sandbox Code Playgroud)

我想编写一个不返回任何项目的空实现,如下所示:

public class EmptyItemRetriever : IItemRetriever
{
    public IAsyncEnumerable<string> GetItemsAsync()
    {
       // What do I put here if nothing is to be done?
    }
}
Run Code Online (Sandbox Code Playgroud)

如果它是一个普通的 IEnumerable,我会return Enumerable.Empty<string>();,但我没有找到任何AsyncEnumerable.Empty<string>().

解决方法

我发现这有效但很奇怪:

public async IAsyncEnumerable<string> GetItemsAsync()
{
    await Task.CompletedTask;
    yield break;
}
Run Code Online (Sandbox Code Playgroud)

任何的想法?

c# c#-8.0 iasyncenumerable

34
推荐指数
3
解决办法
6242
查看次数

SQL INNER JOIN vs LEFT JOIN with a WHERE

我试图更直观地掌握 SQL 连接。就在昨天,我了解了如何将 RIGHT JOIN 重写为 LEFT JOIN(通过翻转表格的顺序),这帮助我更好地理解了这两个连接的工作方式。

但是,现在我想知道是否可以将 INNER JOIN 重写为带有 WHERE 条件的 LEFT JOIN——这意味着它们的逻辑可能是等效的(“逻辑”不是指执行计划,而是将描述预期的结果集)。

喜欢:

SELECT * FROM HeaderTable
INNER JOIN DetailTable 
ON HeaderTable.ID = DetailTable.ParentID
Run Code Online (Sandbox Code Playgroud)

我将其读作“向我显示HeaderTableDetailTable表中在HeaderTable.IDDetailTable.ParentID字段中具有匹配值的所有记录。” 与以下相同:

SELECT * FROM HeaderTable
LEFT JOIN DetailTable 
ON    HeaderTable.ID = DetailTable.ParentID
WHERE HeaderTable.ID = DetailTable.ParentID
Run Code Online (Sandbox Code Playgroud)

这也是我读作“让我看看表中的所有记录HeaderTableDetailTable其中的价值HeaderTable.ID相同的值DetailTable.ParentID。”

这些会返回相同的结果集吗?我更多地询问逻辑是否相同,而不是一个比另一个更有效。

如果我可能会问,请不要用任何维恩图来回答,因为这些似乎并没有准确地描述连接的逻辑。

sql-server join inner-join left-join

6
推荐指数
1
解决办法
3527
查看次数

C#:将字符列表转换为字符串

我正在用 C# 使用列表解决 Coderbyte 上的编码挑战。我有想要的结果,但需要将它作为字符串返回。

我想知道如何将我的字符列表转换为字符串。先感谢您。

这是我的代码:

string s = "I love dogs";
int i, j = 0;
List<char> array1 = new List<char>();
List<char> array2 = new List<char>();

for (i = 0; i < s.Length; i++)
{
    if (s.Length == j)
        break;

    if (Char.IsLetter(s[i]))
    {
        array1.Add(s[i]);
    }
    else
    {
        for (j = i; j < s.Length; j++)
        {
            if (Char.IsLetter(s[j]))
            {
                array2.Add(s[i]);
            }
            if (!Char.IsLetter(s[j]) || j == s.Length - 1)
            {
                if (array1.Count >= array2.Count)
                {
                    array2.Clear();
                }
                else …
Run Code Online (Sandbox Code Playgroud)

c# string

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