我正在学习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()?
它具有以下特点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>,所以输入。
什么?与之前不同的是,这次地点并不重要。
为什么这两个例子对彼此的看法不同?
有一个方法接收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# ×3
covariance ×1
delegates ×1
idisposable ×1
ienumerable ×1
ienumerator ×1
linq ×1
valuetuple ×1