我有这门课
public class MyClient : IMyClient, IMyClientAsync,IDisposable
Run Code Online (Sandbox Code Playgroud)
我正在编写一个返回IMyClientAsync如下的包装器:
IMyClientAsync GetClient()
{
return new MyClient ();
}
Run Code Online (Sandbox Code Playgroud)
但是,任何使用此包装器的人都无法在using块中关闭客户端using(var client = MyWrapper.GetClient()){},因为对象实现的信息IDisposable丢失了。
有什么办法可以改变它,以便仍然能够在一个using块中关闭我的客户端?
class first
{
private int? firstID;
}
class second
{
private int secondID;
private int secondField;
}
public override Expression<Func<first, bool>> FirstFilter()
{
Contex db = new Contex();
List<second> list = (from p in db.second select p).ToList();
return b => list.Select(p => p.secondID).Contains(b.firstID);
}
Run Code Online (Sandbox Code Playgroud)
我有错误:
无法从“System.Collections.Generic.IEnumerable”转换为“System.Collections.Generic.IEnumerable”
我尝试了很多不同的方法,但我只是不知道如何解决它。
我需要返回另外两个表达式的乘法表达式,但是这个例子给了我错误
public Func<double> EvaluateOne()
{
return () => EvaluateTwo() * EvaluateTwo();
}
public Func<double> EvaluateTwo()
{
return () => 2;
}
Run Code Online (Sandbox Code Playgroud)
在功能EvaluateOne
错误:can't applay operand * to operands of type Func<double> and Func<double>
我试图在委托上绑定以下操作:
2*2+2这当然应该给出6但是我的例子给出了8
我认为这里使用的所有代表都不会被评估,直到这个linie
var result = response();
Run Code Online (Sandbox Code Playgroud)
但它以其他方式工作,然后我被期待,我认为在响应变量委托下将是:
EvaluateConst()() * EvaluateConst()() + EvaluateConst()()这种方式数学运算符shold优先于语言规范但不是.
static void Main(string[] args)
{
var response = Mul();
var result = response();
}
public static Func<double> Add()
{
return () => EvaluateConst()() + EvaluateConst()();
}
public static Func<double> Mul()
{
return () => EvaluateConst()() * Add()();
}
public static Func<double> EvaluateConst()
{
return () => 2;
}
Run Code Online (Sandbox Code Playgroud)
有没有办法通过修改它来实现我想要的?
有趣的是,如果设置breakPoint on line return () => 2;
debuger,只有在finall评估之后才能捕获它 var result = response();
嗨,我发现一个问题,如果我用FileShare.None打开一个文件然后在读取所有行后在静态类中创建StreamReader它也会释放文件
class Program
{
static void Main(string[] args)
{
using (
var fileStream = new FileStream(
@"SomeShareFolder\File.txt",
FileMode.Open,
FileAccess.Read,
FileShare.None,
512,
FileOptions.None))
{
var lines = fileStream.ReadAllLines();
//HERE THE FILE IS ALREADY RELESEAD so other process now if tries to open with FileStream and FileShare.None there will not be any exception that file is locked
}
}
}
public static class FileStreamExtension
{
public static List<string> ReadAllLines(this FileStream filestream, StringSplitOptions splitOption = StringSplitOptions.RemoveEmptyEntries)
{
var strings = new List<string>();
using …Run Code Online (Sandbox Code Playgroud)