小编isa*_*go_的帖子

Linq 何时自动调用实现 IEnumerator<T> 的类的 Dispose()?

我正在学习IEnumerable<T>并且IEnumerator<T>.

我参考这个例子写了代码。

这是使用它的链接中的示例代码的一部分:

var stringsFound =
    from line in new StreamReaderEnumerable(@"C:\temp\tempFile.txt")
    where line.Contains("string to search for")
    select line;

Console.WriteLine($"Found : {stringsFound.Count()}");
Run Code Online (Sandbox Code Playgroud)

我在这里有一个问题想问你。

StreamReaderEnumerator是系统自动创建的,那么什么时候StreamReaderEnumerator调用呢Dispose()

c# linq ienumerable ienumerator idisposable

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

从协方差返回 Action&lt;T&gt; 的方法

它具有以下特点interface

public interface ICovariant<out T>
{
    public void InputFunc(Func<T> func);
}
Run Code Online (Sandbox Code Playgroud)

我收到以下编译时错误:

无效方差:协变类型参数“T”用于逆变位置。参数必须是输入安全的

输入Func<T>的位置。是,所以是输出Func<T>Func<out T>

好吧,我错了。获取位置相关的信息。

但是,当我添加以下方法时,会发生错误。

public interface ICovariant<out T>
{
    public void InputFunc(Func<T> func);
    public Action<T> ReturnAction();
}
Run Code Online (Sandbox Code Playgroud)

无效方差:协变类型参数“T”用于逆变位置。方法返回类型必须是输出安全的

的位置Action<T>输出Action<T>Action<in T>,所以输入

什么?与之前不同的是,这次地点并不重要。

为什么这两个例子对彼此的看法不同?

c# delegates covariance

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

有没有办法在接收 ValueTuple 作为参数时命名字段?

有一个方法接收aValueTuple并修改后返回它。那么,我可以ValueTuple在方法参数中指定字段名称吗?

private static void Operation()
{
    var tuple = (X: 10, Y: 20);
    var changeTuple = ChangeTuple(tuple);
}

private static ValueTuple<int, int> ChangeTuple(ValueTuple<int, int> tuple)
{
    tuple.Item1 = 100; // ex) tuple.X = 100;
    tuple.Item2 = 200; // ex) tuple.Y = 200;
    return tuple;
}
Run Code Online (Sandbox Code Playgroud)

c# valuetuple

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