小编Geo*_*ett的帖子

将LINQ orderby转换为inplace list sort

目前,我正在使用LINQ对象对列表进行排序,然后ToList()对结果进行处理:

var SortedPossibleMoveLocations = (from PML in PossibleMoveLocations
                                   orderby Randomiser.Next()
                                   orderby IsSameType(PML) ? (_Owner[PML] as TileFlowing).UnitsWithin : 0
                                   orderby PossibleMoveLocationOrdering(PML)
                                   select PML).ToList();
Run Code Online (Sandbox Code Playgroud)

我想转换它来做一个inplace sort,我想使用List<T>.Sort()方法.如果我只是按一个事情排序,我知道如何做到这一点,但是,因为我按顺序排序PossibleMoveLocationOrdering(返回一个int)然后通过IsSameType(PML) ? (_Owner[PML] as TileFlowing).UnitsWithin : 0哪个计算结果为a int,然后通过Randomiser.Next()(返回一个随机int)我不这样做知道怎么做.

问题:如何编写比较函数(或者有更好的方法)来执行上面的LINQ查询.

c# linq sorting list

5
推荐指数
2
解决办法
6156
查看次数

AppSettings清除app.config中的Xml元素

应用程序配置文件中标记<Clear \>内的XML元素的用途是什么<AppSettings>

我看到它删除了以前添加的设置(请参阅下面的代码),但为什么要这样做呢?

<appSettings>
  <add key="LogInformation" value="False"/>
  <add key="LogAPIMessages" value="False"/>
  <add key="LogErrors" value="True"/>
  <clear/> <!--This line removes previously added keys.-->
</appSettings>
Run Code Online (Sandbox Code Playgroud)

我也明白,在代码中操作应用程序设置时,您可以清除现有密钥,但为什么要使用<clear\>XML元素?

而且,出于习惯,我一直把<clear\>元素放在任何<add>元素之前.如果我不这样做,我是否需要这样做?

.net c# vb.net app-config appsettings

5
推荐指数
2
解决办法
3345
查看次数

FxCop中的自定义规则仅适用于特定类型方法调用的方法

我想创建一个应用方法的FxRule,只有在从特定类调用该方法时才会这样.

注意:我不想只是将规则应用于特定类的方法,我希望能够处理调用其他方法调用其他方法进行装箱的方法.

我想让FxCop报告与拳击方法相关的问题.

以下是我到目前为止的代码:

using System;
using System.Linq;
using Microsoft.FxCop.Sdk;
using System.Collections.Generic;

class CheckUpdatableComponents : BaseIntrospectionRule
{
    private string[] MethodsToCheck = new string[] { "BeginDraw", "BeginRun", "Draw", "EndRun", "EndDraw", "Update" };

    /// <summary>Gets the base class hooked up.</summary>
    public CheckUpdatableComponents()
        : base("CheckUpdatableComponents", "FxCopRules.Rules", typeof(CheckUpdatableComponents).Assembly)
    {
    }

    public override ProblemCollection Check(string namespaceName, TypeNodeCollection types)
    {
        foreach (var type in types.Where(T => IsSubClassOf(T, "Microsoft.Xna.Framework.Game")))
        {
            foreach (var MethodToCheck in MethodsToCheck)
            {
                Method RunMethod = type.GetMethod(Identifier.For(MethodToCheck));

                if (RunMethod != null)
                {
                    Visit(RunMethod);
                } …
Run Code Online (Sandbox Code Playgroud)

.net c# fxcop fxcop-customrules

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

扩展方法向前兼容

使用扩展方法,我们可以轻松地向任何类型添加方法.显然,这在.net的未来版本中开启了扩展方法无法再被调用的可能性(例如,类型现在包括与扩展方法具有相同签名的方法).

这应该是一个问题吗?

如果是这样,我应该如何处理这个问题并设计我的扩展方法,以便在发生这种情况时尽量减少代码更改?

c# extension-methods future-proof

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

集合具有非常快速的迭代和良好的添加和移除速度

我正在追踪一个可以快速迭代的集合.我也会定期添加项目和删除(特定)项目,因此理想情况下这些操作也会很快.

我正在开发xbox,因此仅限于紧凑的框架(或多或少).将垃圾和对象分配保持在最低限度非常重要,因此我可以为我的对象预先分配空间的任何事情都会很棒.

我将在集合中存储uints(但int如果需要可以是s).一般的解决方案会很好,因为我相信我将来会有需求.

一个.net集合将是理想的,没有一个轻量级和开源的东西会很棒.

是否有适合我需求的收藏课程?如果没有,我将如何创建一个?


为了详细说明,它们是对象id,类应该处理每个帧.它们通常按升序添加,有间隙.没有上限.任何可以删除,这将留下空白.
迭代顺序并不完全重要,但如果顺序一致,它将非常有用(特别是对于调试).

c# collections performance xna xbox

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

强制应用程序具有管理员权限

我需要授予应用程序管理员权限,因为它知道它将从用户会话而不是管理员帐户运行.

我看过其他网站,但找不到任何有用的东西.

我尝试编辑清单和其他东西,并插入了行:

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
Run Code Online (Sandbox Code Playgroud)

尝试使用ClickOnce发布时,这给了我一个错误,但在我调试时却没有.

你能帮助我吗?

c# clickonce privileges administrator

5
推荐指数
2
解决办法
5688
查看次数

Guide.IsTrialMode是否适用于Windows 8商店应用程序的MonoGame?

我一直在使用XNA为xbox和windows phone 7制作游戏.现在我想使用MonoGame 创建一个Metro 8 Store应用程序.

我成功地跳过了所有的篮球并让它运转起来,但我遇到了问题Guide.IsTrialMode.

我有单独的逻辑,取决于游戏是否处于试用模式,哪个适用于其他平台,但是当我在本地机器上测试我的应用程序时,或者在模拟器中它总是认为我没有购买游戏.我担心的是,当它在应用程序商店并且人们实际购买它时,逻辑不会改变.

TL; DR:请问Guide.IsTrialMode工作MonoGame为Windows 8商店应用以及如何测试呢?

c# monogame windows-8 windows-store-apps

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

使用T4模板生成代码时引用第三方DLL

我正在尝试编写一个需要登录FB以获取文档的T4模板.要做到这一点,我需要引用第三方DLL.可以这样做,如果是这样,怎么办?

c# t4 code-generation

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

接口实现和返回类型

List<T>类实现了IEnumerable<T>接口.它有一个GetEnumerator返回a 的方法List<T>.Enumerator.

我有一个如下所示的类,它给出了一个编译错误,指出返回类型GetEnumerator与接口不匹配.

public class InsertionSortedSet<T> : IEnumerable<T>
{
    public struct Enumerator : IEnumerator<T>
    {
        // Required interface implemented
    }

    // Other interface methods implemented

    public Enumerator GetEnumerator()
    {
        return new Enumerator(this);
    }
}
Run Code Online (Sandbox Code Playgroud)

'Entities.Helpers.InsertionSortedSet'未实现接口成员'System.Collections.Generic.IEnumerable.GetEnumerator()'.'Entities.Helpers.InsertionSortedSet.GetEnumerator()'无法实现'System.Collections.Generic.IEnumerable.GetEnumerator()',因为它没有匹配的返回类型'System.Collections.Generic.IEnumerator'.

鉴于它List<T>似乎返回它自己的Enumerator类(不是接口),但它确实实现了Enumeration<T>我很困惑的接口,因为我看不出我对那个类有什么不同.

我的设置有什么问题导致它失败,哪里List<T>有效?


我想返回一个InsertionSortedSet<T>.Enumerator而不是界面,因为它避免拳击,我需要切出.

c# generics interface enumerator

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

创建一个类型化的ModelState.AddModelError()

在控制器中,我可以执行数据库查找等,并添加一些与模型属性关联的错误消息:

public ActionResult CreateJob(CreateJobModel viewModel)
{
    var call = FindCall(viewModel.CallNumber);

    if (call == null)
    {
        ModelState.AddModelError("CallNumber", "Idiot User!");
    }
}
Run Code Online (Sandbox Code Playgroud)

我不喜欢CallNumber是一个字符串,理想情况下它应该直接引用viewModel.CallNumber,如果我更改该属性的名称,它也应该更改.

我怎样才能做到这一点?

我想,代码最终将会出现这样的情况,它将采用属性访问表达式:

AddModelFieldError(() => viewModel.CallNumber, "Idiot User!");
Run Code Online (Sandbox Code Playgroud)

但我不确定如何创建这样的方法,或者在需要错误消息的子/内部属性的情况下.

c# asp.net-mvc lambda asp.net-mvc-2

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