如果一个对象IDisposable在C#中实现,则可以写入
using(DisposableFoo foo = new DisposableFoo())
Run Code Online (Sandbox Code Playgroud)
我一直想知道为什么using看起来像C#关键字,但需要在.Net框架中定义的接口.是using关键字(在这种情况下,显然是用于定义库导入),还是Microsoft在Visual Studio/.Net框架中重载了它?我不希望C#关键字依赖于库.
ReadOnlyCollection<T>实现ICollection<T>具有添加和删除等方法的界面.我知道如何使用属性从Intellisense隐藏方法,但是如果我尝试使用这些方法,怎么可能导致实际的编译错误?
(顺便说一句,我知道在ROC上调用Add和Remove是没有意义的,这是一个关于导致继承的memebers的编译错误的问题,而不是使用正确的数据结构).
如果在测试类中声明私有字段:
private Foo foo;
使用但从未分配,当我将鼠标悬停在声明上时,IntelliJ IDEA(以及可能是其他IDE)会显示警告,并将其呈现为灰色
私人领域'foo'永远不会被分配
但是,如果我使用Mockito并注释该字段,如:
@Mock
private Foo foo;
警告消失并将字段呈现为紫色,表示已分配该字段.IDE如何知道@Mock含义?我已经浏览了Mockito源代码,注释定义似乎没有任何内容,我的IDE没有Mockito插件.
我正在编写一个类似于Mockito的库,带有一个等效的注释,我很想知道让IDE删除警告.
(我不是Java开发人员,所以如果我说错了请纠正我)
编辑 我在Eclipse中尝试了这个,它实际上删除了任何注释的警告,这是@nikpon建议的.
为什么我得到这个结果?
[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.
如何将参数传递给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#编译器的限制还是CLR从根本上禁止它?
有没有一种方法可以多次调用方法/代码行而不使用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循环
如果我有一个如下课程:
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因为调用模糊而试图将其称为错误,这当然是正确的.但是如果通过反射或其他动态方式调用该方法会怎样.我想它会在运行时抛出异常.所以我的问题是为什么编译器允许我创建具有相同类型的类,如果有异常等待发生?
我有一个方法,需要三个参数(3D点).如果积分为共线,我想抛出异常.对我来说明显的例外是ArgumentException,但最好的做法是在构造函数中包含param名称.在我的情况下,它是所有三个参数的组合,这是无效的输入 - 所以最佳实践不会起作用(我认为我的代码分析会像地狱一样呻吟).
所以我ArgumentException在这里使用或类似的东西,InvalidOperationException因为有多个参数导致问题?
我有一个非常大的 ControlTemplate(200 多行),里面有许多嵌套控件。我需要重用此模板,并对这些嵌套控件之一(复选框的可见性)进行一些小更改。显然,我不想复制粘贴到新的 ControlTemplate 中,只是进行更改,因为我会将代码库加倍,如果我对模板进行常见更改,我将需要更改两者。
我想到了三种似乎可行的解决方案,但我对 XAML 的了解还不够(尤其是重构 XAML 来知道这些是否可行)
将通用 XAML 提取到基本 ControlTemplate 中,并“覆盖”两个新 ControlTemplate 中的复选框可见性(我将覆盖放在引号中,因为我使用的是 C# 语言 - 我不知道这在 XAML 中是否有意义!)
从 ControlTemplate 定义外部访问该复选框(可能通过 x:Name 或 x:Key),然后设置可见性将很简单。
在 ControlTemplate 中指定 Visibilty 上的某种绑定,例如:
<Checkbox Visibility={Binding someNewPropertyOfTheTemplate}/>
(这就是TemplateBinding的用途吗?)
这些想法是否有效?如果是的话,哪个是最合适的?(如果不是 - 正确的方法是什么?)
我正在使用 VS2010 和 .Net 4.0。
c# ×8
.net ×1
action ×1
annotations ×1
clr ×1
exception ×1
for-loop ×1
generics ×1
idisposable ×1
interface ×1
java ×1
mockito ×1
mstest ×1
nan ×1
reflection ×1
silverlight ×1
validation ×1
wpf ×1
xaml ×1