小编kos*_*kov的帖子

返回我的对象​​实现 IDisposable 的信息

我有这门课

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块中关闭我的客户端?

c#

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

无法从“System.Collections.Generic.IEnumerable<int>”转换为“System.Collections.Generic.IEnumerable<int?>”

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”

我尝试了很多不同的方法,但我只是不知道如何解决它。

c# linq

0
推荐指数
1
解决办法
2998
查看次数

返回其他代表的组合

我需要返回另外两个表达式的乘法表达式,但是这个例子给了我错误

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>

c#

0
推荐指数
1
解决办法
52
查看次数

委托评估订单

我试图在委托上绑定以下操作: 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();

c#

0
推荐指数
1
解决办法
80
查看次数

StreamReader释放锁定文件

嗨,我发现一个问题,如果我用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)

c#

0
推荐指数
1
解决办法
83
查看次数

标签 统计

c# ×5

linq ×1