小编Ste*_*ris的帖子

为IList优化LINQ

不久之前,我编写了一个IList扩展方法,通过使用索引来枚举列表的一部分.在重构的过程中,我意识到可以通过调用来执行类似的查询Skip(toSkip).Take(amount).在对此进行基准测试时,我发现它Skip没有针对进行优化IList.通过一些谷歌搜索,我最终在Jon Skeet的帖子,讨论为什么优化方法Skip是危险的.

据我理解这篇文章,问题是在修改集合时抛出优化方法没有异常,但是作为注释声明msdn文档本身冲突.

IEnumerator.MoveNext()中:

如果对集合进行了更改,例如添加,修改或删除元素,则枚举数将无法恢复,并且下一次调用MoveNext或Reset 会引发InvalidOperationException.

IEnumerator.GetEnumerator()中:

如果对集合进行了更改(例如添加,修改或删除元素),则枚举数将无法恢复,并且其行为未定义.

我认为两种惯例都有用,而且无论是否进行优化都会有点失落.什么是正确的解决方案?我一直在考虑采用Kris Vandermotten在评论中提到的IList.AssumeImmutable()方法AsParallel().是否已存在任何实现,或者这是一个坏主意?

.net c# linq optimization skip

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

检查某个类型是否为Action委托

我试图检查给定类型是否是一个动作委托,无论参数数量多少.

以下代码是我知道如何执行此操作的唯一方法.

    public static bool IsActionDelegate( this Type source )
    {
        return source == typeof( Action ) ||
               source.IsOfGenericType( typeof( Action<> ) ) ||
               source.IsOfGenericType( typeof( Action<,> ) ) ||
               ....
               source.IsOfGenericType( typeof( Action<,,,,,,,,,,,,,,,> ) );
    }
Run Code Online (Sandbox Code Playgroud)

IsOfGenericType() 是我的另一种扩展方法,它执行它所说的,它检查类型是否是给定的泛型类型.

有更好的建议吗?

c# reflection delegates

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

面向代理的设计在现实世界中?

我们在我的软件开发课上一直在学习面向Agent的编程,而我的教授是他的一个重要支持者,他一生都在使用它.

我的问题是从设计和实现的角度来看使用代理的真正优点/缺点.从我的教授的角度来看,Agent可以比通过普通的OOP方法更容易地重建非常复杂的操作.但在我看来,代理在复杂环境中编程同样麻烦.它们受各种并发,时序和数据完整性问题的影响.从编码员的角度来看,代理代码相当复杂,比普通的OOP代码更难理解.

有人可以让我了解软件代理在实际开发中的看法以及学术活动之外的优势/劣势是什么?

oop paradigms agent

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

以更长的顺序查找子序列

我需要在其他大序列中找到一个序列,例如,{1,3,2,3}存在于{1,3,2,3,4,3}和中{5,1,3,2,3}.有没有办法快速与IEnumerable其他东西一起做?

c#

7
推荐指数
3
解决办法
3506
查看次数

是不是保证完成运行的析构函数?

析构函数很奇怪.我试图通过使用"智能"参考管理来消除使用一次性模式的需要,确保垃圾收集器可以在正确的时间收集对象.在我的一个析构函数中,我不得不等待来自另一个对象的事件,我注意到它没有.应用程序只是关闭,析构函数在执行过程中被终止.我希望总是允许析构函数完成运行,但是下面的测试表明这不是真的.

using System;
using System.Diagnostics;
using System.Threading;


namespace DestructorTest
{
    class Program
    {
        static void Main( string[] args )
        {
            new DestructorTest();
            new LoopDestructorTest();
            using ( new DisposableTest() ) { }
        }
    }

    class DestructorTest
    {
        ~DestructorTest()
        {
            // This isn't allowed to finish.
            Thread.Sleep( 10000 );
        }       
    }

    class LoopDestructorTest
    {
        ~LoopDestructorTest()
        {           
            int cur = 0;
            for ( int i = 0; i < int.MaxValue; ++i )
            {
                cur = i;
            }
            // This isn't allowed …
Run Code Online (Sandbox Code Playgroud)

c# destructor finalizer

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

如何在MVC项目中从已弃用的Google+登录API迁移到新的Google Identity平台?

几天前,我收到一封电子邮件,通知我Google将弃用其Google+ API:

在2019年3月7日,所有Google+ API和Google+登录将完全关闭。从1月下旬开始这将是逐步关闭,最早在2019年1月28日开始对这些API的调用会间歇性地失败。

我目前在ASP.NET MVC项目中使用Google+登录作为外部登录提供程序。看来,ASP.NET文档尚未更新(在撰写本文时),以考虑到此不推荐使用的API

有没有关于AddGoogle()扩展方法是否仍然可以在AuthenticationBuilder中间件中使用的指南,如果可以,如何?如果没有,我在哪里可以找到有关如何从Google+迁移到Google身份平台的指南

asp.net-core-mvc google-signin

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

从 Android Studio 运行 Android 应用程序时如何启用协程调试模式?

我在通过 Android Studio 以调试模式运行 Android 应用程序时遇到协程异常。

kotlinx.coroutines.JobCancellationException:StandaloneCoroutine 已取消

协程调试文档中,我了解到,通过启用协程的调试模式,我可能会获得更完整的堆栈跟踪信息。

它可以通过设置系统属性 DEBUG_PROPERTY_NAME 或通过运行带有启用断言(-ea 标志)的 Java 来启用。

这就是我被困住的地方。在 Android Studio 中实现此目的的惯用方法是什么?我的项目是使用 Gradle 配置的,并且在 Windows 上运行。理想情况下,有一种方法可以通过 Gradle 配置进行配置,以便任何通过源代码控制拉入此项目的人都可以启用协程调试模式。

gradle kotlin android-studio kotlin-coroutines

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

xsd:具有可选属性的唯一

我有这个Xml文件:

<objects>
  <object name="ID1" />
  <object name="ID2" />
  <object name="ID2" color="green" />
  <object name="ID3" color="green" />
<objects>
Run Code Online (Sandbox Code Playgroud)

我想验证这一点对一个XSD架构,使之间的组合name,并color在文档中是唯一的.

问题是,如果我使用:

<xs:unique name="UniqueObjectNameColor">
  <xs:selector xpath="./object" />
  <xs:field xpath="@name" />
  <xs:field xpath="@color" />
</xs:unique>
Run Code Online (Sandbox Code Playgroud)

...规则将忽略object没有可选color属性的元素.以下验证正确,但不应该.

  <object name="ID2" />
  <object name="ID2" />
Run Code Online (Sandbox Code Playgroud)

你能告诉我如何指定一个强制执行唯一namecolor组合的规则,当color元素中没有该属性时object,它会检查name

xml xsd unique

6
推荐指数
2
解决办法
1367
查看次数

typeof为未构造的嵌套泛型类型提供异常'Type expected`

通常使用typeof获取未构造的泛型类型非常简单:

Type genericType = typeof( Func<> );
Run Code Online (Sandbox Code Playgroud)

我希望以下内容也能正常工作,但它会产生编译错误Type expected.

Type genericNestedType = typeof( Func<Func<>> );
Run Code Online (Sandbox Code Playgroud)

通过Func<Func<object>>改为使用它来解决这个问题相对容易.但是,在你"消费"这种类型的地方,你必须记住打电话GetGenericTypeDefinition().

您可能希望"填满"所有未分配的泛型类型参数的方案是不可能的.同样,创建一个虚拟类型代替表示这些参数会相对容易.(例如Func<Func<ToReplace, object, int>>)

是否有任何理由typeof不适用于嵌套的通用未构造类型?

c# generics reflection typeof

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

为什么我不能将属性转换为嵌套元素?

我正在从'App.config'中读取设置.我只是想出了如何使用ConfigurationSection,ConfigurationElementCollectionConfigurationelElement.

App.config中:

<?xml version="1.0" encoding="utf-8" ?>
<configuration> 
    <configSections>
        <sectionGroup name="notificationSettingsGroup">
                <section name="mailTemplates" type="Project.Lib.Configuration.MailTemplateSection, Project.Lib"
                    allowDefinition="Everywhere" allowExeDefinition="MachineToApplication" requirePermission="false"/>
        </sectionGroup>         
    </configSections>
    <notificationSettingsGroup>
        <mailTemplates>
            <items>
                <mailTemplate name="actionChain" subject="Subject bla-bla">
                    <body>Body bla-bla</body>
                </mailTemplate>                 
            </items>
        </mailTemplates>
    </notificationSettingsGroup>
    <startup>
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
    </startup>  
</configuration>
Run Code Online (Sandbox Code Playgroud)

我的C#代码:

public class MailTemplateSection : ConfigurationSection
{
    [ConfigurationProperty("items", IsDefaultCollection = false)]
    public MailTemplateCollection MailTemplates
    {
        get { return (MailTemplateCollection)this["items"]; }
        set { this["items"] = value; }
    }
}
Run Code Online (Sandbox Code Playgroud)
[ConfigurationCollection(typeof(MailTemplateElement), AddItemName = "mailTemplate",
    CollectionType = ConfigurationElementCollectionType.AddRemoveClearMap)]
public …
Run Code Online (Sandbox Code Playgroud)

.net c# xml app-config

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