小编Efr*_*ain的帖子

C#:最优雅的方法来测试int x是否是给定集合的元素?

问题:测试是否x∉{2,3,61,71}

我经常想知道是否有更好的方法:

if (x != 2 && x != 3 && x != 61 && x != 71)
{
  // do things
}
Run Code Online (Sandbox Code Playgroud)

if (!new List<int>{ 2, 3, 61, 71 }.Contains(x))
{
  // do things
}
Run Code Online (Sandbox Code Playgroud)

后者看起来相当优雅,但实际上如果你读它会有点恼火,特别是因为倒置.这是一种丑陋的事情,因为在英语中我们说"x不是...的元素",这在C#中难以表达而不会刺激开销.也许一个人if (Object(x).IsElementOf(new[] { ... }))怎么说?

嗯......有什么建议吗?是否有任何.Net标准方法来测试这样的事情?

.net c# coding-style

26
推荐指数
3
解决办法
9420
查看次数

Visual Studio:查询TFS工作项:AND/OR逻辑不起作用?

我需要找到与项目中某个主题相关的TFS工作项.为此,我尝试使用Visual Studio中的查询构建器查询工作项.

由于我希望搜索多个术语,我想象一个这样的查询:

WHERE (
Priority > 300 AND 
(Title.Contains('Dog') OR Title.Contains('Cat') OR Title.Contains('Hamster')))
Run Code Online (Sandbox Code Playgroud)

现在,根据http://msdn.microsoft.com/en-us/library/dd286638.aspx(节和/或)应该能够做到这一点,像这样:

    | Priority|   >    | 300
And | Title | Contains | Dog
Or  | Title | Contains | Cat
Or  | Title | Contains | Hamster
Run Code Online (Sandbox Code Playgroud)

但是......这不能像所描述的那样起作用:据我所见,这被视为

(优先级> 300 AND Title.Contains('Dog'))或Title.Contains('Cat')OR Title.Contains('Hamster')))

现在这对我来说有点问题,因为除了"优先级"标准之外,我还有8个额外的标准需要应用于所有匹配(日期,状态等).我不仅有三场冠军赛,而且还有十场左右.因此,这将成倍增加,我最终会得到一个非常长且多数冗余的查询.

..或者,我在这里遗漏了什么?有没有其他方式来表达这些陈述?或者是否有另一种方法来查询TFS工作项,比如另一种工具?

谢谢!

tfs workitem visual-studio-2010

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

CA1726:FxCop禁止的词:标志

有人希望我让其他人的代码符合某些FxCop规则集,其中包括规则CA1726:使用首选术语.大多数术语/替换都是正确的,我可以理解,人们必须决定用一种方法来命名.

但是,"旗帜"一词的处理方式是什么?任何人都可以向我解释为什么我不会使用这个名字?(在我去老板之前抱怨它之前;))

比如,我有一个数据对象,它有一个类'flags'的成员,它捆绑了大量定义如何处理数据对象的属性.你怎么称呼这个?

c# fxcop coding-style rules

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

CA1819:属性不应返回数组 - 什么是正确的替代方案?

之前我遇到过这个FxCop规则,并不满足于如何解决违规(thread1,thread2).我现在有另一个案例需要纠正违反CA1819的行为.

具体来说,我有一个算法库,它在曲线(x,y)上执行一些分析计算,公共"输入对象"如下:

public class InputObject
{
        public double[] X { get; set; }
        public double[] Y { get; set; }
        // + lots of other things well
}
Run Code Online (Sandbox Code Playgroud)

此对象的X和Y属性在库中的数百个位置中使用,通常使用索引.输入对象永远不会被算法改变,但实际上它应该无关紧要.而且,.Length经常被称为.它是一个数学库,并且double[]是那里的标准数据类型.无论如何,修复CA1819将需要相当多的工作.

我考虑使用List<double>,因为Lists支持索引并且与数组非常相似,但我不确定这是否会减慢算法速度或者FxCop是否会对这些列表感到满意.

更换这些double[]属性的最佳选择是什么?

.net c# fxcop

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

Why can't I pass a various numbers of references to a function?

I want to do something like this:

double a, b, c, d, e;
ParseAndWrite("{1, 2, 3}", ref a, ref b, ref c);
ParseAndWrite("{4, 5}", ref d, ref e);

-> a = 1, b = 2, c = 3, d = 4, e = 5
Run Code Online (Sandbox Code Playgroud)

However, I can not write a function like this:

private void ParseAndWrite(string leInput, params ref double[] targets)
{
   (...)
}
Run Code Online (Sandbox Code Playgroud)

This doesn't work, for some reason one can not use ref and params at the same …

.net c# ref params

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

Angular.js和ng-switch-when - 模拟枚举

我想为我的控制器逻辑引入一些enum用于某些类型的安全性,所以例如我创建了这样的东西:

var app = angular.module('myApp', []);
var StateEnum = Object.freeze({"login":1, "logout":2})
function LoginCheckCtrl($scope) {
    $scope.stateEnum = StateEnum
    $scope.loginData = StateEnum.login
    $scope.login = function() {
        console.log($scope.loginData  ? 'logged in' : 'not logged in');
        $scope.loginData = StateEnum.logout;
    };
    $scope.logout = function() {
        console.log($scope.loginData ? 'logged in' : 'not logged in');
        $scope.loginData = StateEnum.login;
    };
}
Run Code Online (Sandbox Code Playgroud)

在我的示例页面中,我会有这样的事情:

<div ng-controller="LoginCheckCtrl">
   <div ng-switch on="loginData"> 
      <div ng-switch-when="stateEnum.login" ng-include="'login'"></div>
      <div ng-switch-when="stateEnum.logout" ng-include="'logout'"></div>
   </div>
</div>

<script type="text/ng-template" id="login">
    <button ng-click="login()">Login</button>
</script>

<script type="text/ng-template" id="logout">
    <button ng-click="logout()">Logout</button>
</script>
Run Code Online (Sandbox Code Playgroud)

但 …

javascript enums angularjs

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

CA2000:未沿所有异常路径放置的对象

虽然之前已经讨论了主题,但建议的解决方案似乎不起作用..

我在表单应用程序中有一个按钮单击回调方法,它显示了一个文件夹选择器对话框:

private void ButtonSelectReporterFolderClick(object sender, EventArgs e)
{
    using (var dialog = new FolderBrowserDialog()) // causes warning
    {
        if (dialog.ShowDialog() == DialogResult.OK)
        {
            this.boxReporterFolderPath.Text = dialog.SelectedPath;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这会产生一个警告:

CA2000: Microsoft.Reliability : In method 'MainWindow.ButtonSelectReporterFolderClick(object, EventArgs)', object '<>g__initLocal' is not disposed along all exception paths. Call System.IDisposable.Dispose on object '<>g__initLocal' before all references to it are out of scope.

我也试过使用try- finally块甚至调用dialog.Dispose没有任何块,一切都无济于事 - 警告仍然存在,始终在初始化线.

c# fxcop ca2000

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

XmlElement.SelectNodes(..) - 找不到任何东西..帮助?

抱歉打扰你这么简单的问题,但是我被困在这里一个小时:

我有一个看起来像这样的xml文件:

<?xml version="1.0" encoding="utf-8"?>
<aaa xmlns="http://blabla.com/xmlschema/v1">

  <bbb>
    <ccc>Foo</ccc>
  </bbb>

  <ddd x="y" />
  <ddd x="xx" />
  <ddd x="z" />

</aaa>
Run Code Online (Sandbox Code Playgroud)

我试图像这样访问元素'ddd':

var doc = new XmlDocument();
doc.Load("example.xml");
foreach (XmlNode dddNode in doc.DocumentElement.SelectNodes("//ddd"))
{
   // do something
   Console.WriteLine(dddNode.Attributes["x"].Value);
}
Run Code Online (Sandbox Code Playgroud)

在运行时,跳过foreach循环,因为我没有从.SelectNodes方法返回任何节点.我在循环之前打破并查看了InnerXML,看起来很好,我还尝试了各种各样的XPath(比如"// bbb"或"/ aaa/ddd"),但只有"/"似乎没有返回空值.

这个确切的代码之前适用于我,现在它没有.我怀疑aaa标签中的命名空间声明,但我无法弄清楚为什么这会导致问题.或者......你能看到我可能遗失的任何东西吗?

.net c# xml xmlreader

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

存储分层Const数据

我经常想知道正确的方法:

例如,在我的程序中,我有大约100个常量(或枚举)用于某些计算.它们最好存放在一个地方.它们可以按层次分组,例如:

System3 / Rules / Rule7 / ParameterXY / MaxAverageValue
Run Code Online (Sandbox Code Playgroud)

当然,我希望在编码时可以访问这些值,因此将它们存储在某种资源中并不是一种选择.

据我所知,这可以通过以下方式完成:

  • 非常长的常名
  • 嵌套类
  • 命名空间

使用名称非常难看,而且它的维护性也不是很好.我发现嵌套类是一种很好的方法,但是一些stylecop/fxcop规则禁止这样做,所以这在某种程度上肯定是"坏"的.最后,我发现建议的替代方案,使用命名空间,并不是非常好.Imho它创建了大量的文件夹和文件,每个文件夹和文件几乎都没有.我不喜欢在装配反射器中弹出50个子命名空间.

那么..你是怎么做这种任务的?你会建议什么?

.net c# namespaces constants

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

StyleCop Madness:受保护的领域

我尽可能地让其他人的代码符合一些StyleCop规则集.现在我想知道以下情况:

我有一个包含字段的抽象类

protected double[] coefficients;
Run Code Online (Sandbox Code Playgroud)

Stylecop说:SA1401:必须使用私人访问声明字段.使用属性公开字段.

所以我改成了:

protected double[] coefficients { get; set; } 
Run Code Online (Sandbox Code Playgroud)

Stylecop说:SA1300:属性名称以大写字母开头:系数.

由于它是一个抽象类,因此子类无法控制.他们使用他们父母的课堂base.coefficients......好吧.

那么......除了压制(或禁用)它之外没有别的办法摆脱这个警告吧?:T

c# inheritance stylecop protected

4
推荐指数
2
解决办法
5946
查看次数