小编Nei*_*ick的帖子

using(){}块内的yield return语句在执行之前处置

我已经编写了自己的自定义数据层来保存到特定文件,并使用自定义DataContext模式对其进行抽象.

这完全基于.NET 2.0 Framework(给定目标服务器的约束),所以尽管其中一些可能看起来像LINQ-to-SQL,但它不是!我刚刚实现了类似的数据模式.

请参阅下面的示例,以了解我无法解释的情况示例.

获取Animal的所有实例 - 我这样做,它工作正常

public static IEnumerable<Animal> GetAllAnimals() {
        AnimalDataContext dataContext = new AnimalDataContext();
            return dataContext.GetAllAnimals();
}
Run Code Online (Sandbox Code Playgroud)

并在下面的AnimalDataContext()中实现GetAllAnimals()方法

public IEnumerable<Animal> GetAllAnimals() {
        foreach (var animalName in AnimalXmlReader.GetNames())
        {
            yield return GetAnimal(animalName);
        }
}
Run Code Online (Sandbox Code Playgroud)

AnimalDataContext()实现了IDisposable,因为我在那里有一个XmlTextReader,我想确保它快速清理.

现在,如果我将第一个调用包装在using语句中,就像这样

public static IEnumerable<Animal> GetAllAnimals() {
        using(AnimalDataContext dataContext = new AnimalDataContext()) {
            return dataContext.GetAllAnimals();
        }
}
Run Code Online (Sandbox Code Playgroud)

并在AnimalDataContext.GetAllAnimals()方法的第一行放置一个断点,在AnimalDataContext.Dispose()方法的第一行放置另一个断点,然后执行...

Dispose()方法被称为FIRST,因此AnimalXmlReader.GetNames()给出"对象引用未设置为对象的实例"异常,因为在Dispose()中AnimalXmlReader已设置为null ???

有任何想法吗?我有一种预感,它关系到产生收益没有被允许一个try-catch块,其内部被称为使用有效的代表,编译一次...

c# idisposable using yield-return .net-2.0

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

"System.MissingMemberException:无法找到服务器工厂"启动TeamCity中自托管的Microsoft.Owin

当Teamcity运行启动自托管Web应用程序的集成测试时,测试将失败并显示错误:

System.MissingMemberException: The server factory could not be located for the given input: Microsoft.Owin.Host.HttpListener
Run Code Online (Sandbox Code Playgroud)

抛出此错误的代码是:

var webApp = WebApp.Start<Startup>("http://*:52203/")
Run Code Online (Sandbox Code Playgroud)

使用Visual Studio(使用Resharper测试运行器)执行测试时运行正常.Teamcity配置为使用JetBrains.BuildServer.NUnitLauncher.exe可执行文件来运行测试.

我看到很多关于这个错误的帖子与Microsoft.Owin.Host.HttpListener.dllbin 有关,因为bin\debug或bin\release文件夹中没有.我可以确认此文件(以及随附的.xml文件)都存在于TeamCity buildAgent使用的bin\release文件夹中.没有bin\debug文件夹.

.net teamcity self-hosting owin

13
推荐指数
2
解决办法
4794
查看次数

在LINQ中,执行IOrderedEnumerable <T>的预测是否保留顺序?

如果我有IOrderedEnumberable<Car>,我会对它进行排序然后进行投影查询...

投影中保留的顺序是什么?

例如,这种情况有效吗?

IOrderedEnumberable<Car> allCarsOrderedFastestToSlowest = 
            GetAllCars()
                  .OrderByDescending(car=>car.TopSpeed);

var top3FastestCarManufacturers =
            allCarsOrderedFastestToSlowest
                  .Select(car=>car.Manufacturer)
                  .Distinct()
                  .Take(3);
Run Code Online (Sandbox Code Playgroud)

top3FastestCarManufacturers变量的名称是否表达了代码中实际发生的含义?

.net c# linq

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

XSLT - 用输出中的转义文本替换撇号

我正在编写一个XSLT模板,需要为xml Sitemap输出有效的xml文件.

<url>
<loc>
    <xsl:value-of select="umbraco.library:NiceUrl($node/@id)"/>
</loc>
<lastmod>
    <xsl:value-of select="concat($node/@updateDate,'+00:00')"/>
</lastmod>
</url>
Run Code Online (Sandbox Code Playgroud)

不幸的是,输出的Url包含一个撇号 - /what's-new.aspx

我需要逃避'去&apos;谷歌Sitemap.不幸的是,我尝试过的所有尝试都将字符串' &apos;'视为''',这是无效的 - 令人沮丧.XSLT有时会让我发疯.

对技术的任何想法?(假设我可以找到解决XSLT 1.0模板和函数的方法)

xml sitemap xslt

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

在LINQ中,.Any <>和.Where <>之间的主要区别/用途是测试记录是否存在

例如,如果我有一个Linq to SQL数据上下文,或者我有ADO.NET实体框架实体映射到数据库表,我想测试一个客户...

之间存在很大差异:

MyDatabaseContext.Customers.Any(c => c.CustomerId == 3)
Run Code Online (Sandbox Code Playgroud)

MyDatabaseContext.Customers.Where(c => c.CustomerId == 3)
Run Code Online (Sandbox Code Playgroud)

.Any <> - 返回类型bool

.Where <> - 返回类型IQueryable

编辑:在接受FredrikMörk的回答后更正了问题措辞 - 谢谢.

.net linq

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

标签 统计

.net ×3

c# ×2

linq ×2

.net-2.0 ×1

idisposable ×1

owin ×1

self-hosting ×1

sitemap ×1

teamcity ×1

using ×1

xml ×1

xslt ×1

yield-return ×1