小编Ric*_*chK的帖子

是'使用'C#关键字?

如果一个对象IDisposable在C#中实现,则可以写入

using(DisposableFoo foo = new DisposableFoo())
Run Code Online (Sandbox Code Playgroud)

我一直想知道为什么using看起来像C#关键字,但需要在.Net框架中定义的接口.是using关键字(在这种情况下,显然是用于定义库导入),还是Microsoft在Visual Studio/.Net框架中重载了它?我不希望C#关键字依赖于库.

.net c# idisposable

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

ReadOnlyCollection如何隐藏添加和删除方法

ReadOnlyCollection<T>实现ICollection<T>具有添加和删除等方法的界面.我知道如何使用属性从Intellisense隐藏方法,但是如果我尝试使用这些方法,怎么可能导致实际的编译错误?

(顺便说一句,我知道在ROC上调用Add和Remove是没有意义的,这是一个关于导致继承的memebers的编译错误的问题,而不是使用正确的数据结构).

c# interface readonly-collection

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

为什么@Mock没有"永远不会分配字段"警告

如果在测试类中声明私有字段:

private Foo foo;

使用但从未分配,当我将鼠标悬停在声明上时,IntelliJ IDEA(以及可能是其他IDE)会显示警告,并将其呈现为灰色

私人领域'foo'永远不会被分配

但是,如果我使用Mockito并注释该字段,如:

@Mock private Foo foo;

警告消失并将字段呈现为紫色,表示已分配该字段.IDE如何知道@Mock含义?我已经浏览了Mockito源代码,注释定义似乎没有任何内容,我的IDE没有Mockito插件.

我正在编写一个类似于Mockito的库,带有一个等效的注释,我很想知道让IDE删除警告.

(我不是Java开发人员,所以如果我说错了请纠正我)

编辑 我在Eclipse中尝试了这个,它实际上删除了任何注释的警告,这是@nikpon建议的.

java annotations intellij-idea mockito

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

在MS测试中的双重平等

为什么我得到这个结果?

[TestMethod]
public void nan_test()
{
    Assert.AreEqual(1, double.NaN, 1E-1); <-- Passes
    Assert.AreEqual(1, double.NaN);       <-- Fails
}
Run Code Online (Sandbox Code Playgroud)

三角洲在断言NaN方面与一个数字有什么不同?当然它应该总是返回假.我知道IsNaN,但这在这里没用(见下文).

背景:我有一个函数返回NaN(错误地),它本来是一个实数,但测试仍然通过.我正在使用delta,因为它是双精度相等,原始测试使用1E-9.

c# mstest nan

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

从Action <T>获取参数

如何将参数传递给Action<T>?代码示例应该突出我想要实现的目标.对不起,这有点长.

class Program
{
    static void Main(string[] args)
    {
        Foo foo = new Foo();
        foo.GetParams(x => x.Bar(7, "hello"));
    }
}

class Foo
{
    public void Bar(int val, string thing) { }
}

static class Ex
{
    public static object[] GetParams<T>(this T obj, Action<T> action)
    {
        // Return new object[]{7, "hello"}
    }
}
Run Code Online (Sandbox Code Playgroud)

看起来有用的唯一选项是GetInvocationList(),Method和Target.但它们似乎都没有包含我所追求的数据(我认为这是因为我宣布了Action的方式).谢谢

编辑:这不是我想要的类型,它是实际值 - 如注释的代码中所述.

c# reflection action

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

它是C#编译器还是禁止多重继承的CLR

正如标题所说的那样.

它是C#编译器的限制还是CLR从根本上禁止它?

c# clr multiple-inheritance

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

通过一个没有for/foreach/while的方法循环

有没有一种方法可以多次调用方法/代码行而不使用for/foreach/while循环?

例如,如果我用于循环:

int numberOfIterations = 6;
for(int i = 0; i < numberOfIterations; i++)
{
   DoSomething();
   SomeProperty = true;
}
Run Code Online (Sandbox Code Playgroud)

我正在调用的代码行不使用'i',在我看来,整个循环声明隐藏了我正在尝试做的事情.对于foreach来说这是一样的.

我想知道是否有一个我可以使用的循环语句看起来像:

do(6)
{
   DoSomething();
   SomeProperty = true;
}
Run Code Online (Sandbox Code Playgroud)

很明显,我只想执行该代码6次,并且没有涉及索引实例化和向某个任意变量添加1的噪声.

作为一个学习练习,我编写了一个静态类和方法:

Do.Multiple(int iterations, Action action)
Run Code Online (Sandbox Code Playgroud)

哪个有效,但在自命不凡的规模上得分非常高,我相信我的同行不会赞同.

我可能只是挑剔而且for循环肯定是最容易识别的,但作为一个学习点我只是想知道是否有(更清洁)替代方案.谢谢.

(我看了一下这个线程,但它不是一样) 使用的IEnumerable没有foreach循环

c# for-loop

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

2种方法使用2种相同类型的泛型

如果我有一个如下课程:

class MyClass<T,U>
{
  public void DoSomething(T t)
  {
  }

  public void DoSomething(U u)
  {
  }
}
Run Code Online (Sandbox Code Playgroud)

但是使用相同的类型构造它(new MyClass<int,int>())这可以很好地编译,但如果我DoSomething因为调用模糊而试图将其称为错误,这当然是正确的.但是如果通过反射或其他动态方式调用该方法会怎样.我想它会在运行时抛出异常.所以我的问题是为什么编译器允许我创建具有相同类型的类,如果有异常等待发生?

c# generics

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

ArgumentException用于参数组合

我有一个方法,需要三个参数(3D点).如果积分为共线,我想抛出异常.对我来说明显的例外是ArgumentException,但最好的做法是在构造函数中包含param名称.在我的情况下,它是所有三个参数的组合,这是无效的输入 - 所以最佳实践不会起作用(我认为我的代码分析会像地狱一样呻吟).

所以我ArgumentException在这里使用或类似的东西,InvalidOperationException因为有多个参数导致问题?

c# validation exception

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

覆盖 ControlTemplate 中的属性

我有一个非常大的 ControlTemplate(200 多行),里面有许多嵌套控件。我需要重用此模板,并对这些嵌套控件之一(复选框的可见性)进行一些小更改。显然,我不想复制粘贴到新的 ControlTemplate 中,只是进行更改,因为我会将代码库加倍,如果我对模板进行常见更改,我将需要更改两者。

我想到了三种似乎可行的解决方案,但我对 XAML 的了解还不够(尤其是重构 XAML 来知道这些是否可行)

  1. 将通用 XAML 提取到基本 ControlTemplate 中,并“覆盖”两个新 ControlTemplate 中的复选框可见性(我将覆盖放在引号中,因为我使用的是 C# 语言 - 我不知道这在 XAML 中是否有意义!)

  2. 从 ControlTemplate 定义外部访问该复选框(可能通过 x:Name 或 x:Key),然后设置可见性将很简单。

  3. 在 ControlTemplate 中指定 Visibilty 上的某种绑定,例如:

    <Checkbox Visibility={Binding someNewPropertyOfTheTemplate}/> (这就是TemplateBinding的用途吗?)

这些想法是否有效?如果是的话,哪个是最合适的?(如果不是 - 正确的方法是什么?)

我正在使用 VS2010 和 .Net 4.0。

silverlight wpf xaml

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