在过去,当我想模拟一个抽象类时,我只是在扩展抽象类的代码中创建一个模拟类,然后在我的单元测试中使用该类...
public abstract class MyConverter : IValueConverter
{
public abstract Object Convert(...) { ... };
public virtual Object ConvertBack(...) { ... }
}
private sealed class MockedConverter : MyConverter { ... }
[TestMethod]
public void TestMethod1()
{
var mock = new MockedConverter();
var expected = ...;
var actual = mock.ConvertBack(...);
Assert.AreEqual(expected, actual);
}
Run Code Online (Sandbox Code Playgroud)
我想养成使用Moq的习惯.我不确定如何使用Moq来测试抽象类的默认返回值.有什么建议吗?
使用Parallel Linq等系统,可以跨单个机器中的多个内核和线程分离匿名函数,查询等的执行.我希望能够使用标准语言结构(例如for循环(如Parallel.For()
),int
s,struct
s 等值类型)扩展它以跨多台机器运行,并将应用程序源修改保持在最低限度.理想情况下,这将允许我打开一个项目,向方法添加属性,并重新编译以获得对增强功能的访问.
看来我需要的东西是:
能够捕获已编译的代码块(例如lambda)并将其传递给在另一个节点上运行的工作进程以及所需的任何数据,或者
提供一个预处理器,它将捕获有问题的代码,在一个模板项目中编译它,它将替换变量引用等,引用一个类来处理网络通信,缓存和访问任何其他所需资产,并发送将DLL生成到在其他计算机上运行的任何可用工作节点.
Roslyn似乎提供了一些在这里很有用的工具.有没有办法挂钩到当前的编译管道允许这个?
编辑
好吧,我知道这是可能的,因为这些人做到了.问题是,怎么样?
我想使用assertArrayEquals(ArrayList<Token>, ArrayList<Token>)
with这些参数(即tolist的arrayList).但Java告诉我,我需要创建这样一个方法.有没有办法测试Junit中任何类型的两个arrayLists的相等性?
我正在尝试使用条件运算符,但我会挂起它认为结果应该是的类型.
下面是一个我设法表明我遇到的问题的例子:
class Program
{
public static void OutputDateTime(DateTime? datetime)
{
Console.WriteLine(datetime);
}
public static bool IsDateTimeHappy(DateTime datetime)
{
if (DateTime.Compare(datetime, DateTime.Parse("1/1")) == 0)
return true;
return false;
}
static void Main(string[] args)
{
DateTime myDateTime = DateTime.Now;
OutputDateTime(IsDateTimeHappy(myDateTime) ? null : myDateTime);
Console.ReadLine(); ^
} |
} |
// This line has the compile issue ---------------+
Run Code Online (Sandbox Code Playgroud)
在上面指出的行上,我得到以下编译错误:
无法确定条件表达式的类型,因为'<null>'和'System.DateTime'之间没有隐式转换
我很困惑因为参数是可以为空的类型(DateTime?).为什么需要转换呢?如果它为null,则使用它,如果是日期时间则使用它.
我的印象是:
condition ? first_expression : second_expression;
Run Code Online (Sandbox Code Playgroud)
与以下相同:
if (condition)
first_expression;
else
second_expression;
Run Code Online (Sandbox Code Playgroud)
显然情况并非如此.这背后的原因是什么?
(注意:我知道,如果我将"myDateTime"设为可以为空的DateTime,那么它会起作用.但为什么需要呢?
正如我之前所说,这是一个人为的例子.在我的实例中,"myDateTime"是一个数据映射值,不能为空.)
c# nullable ternary-operator type-conversion conditional-operator
在Windows应用程序中,使用C#,我有一个报告模块,它将依赖于类来填充报告.但是会有很多报告,我不想为每个报告编写代码.
流程将如下:在报告编辑器中,报告将被分配一个类(即"应用程序")作为字符串.当用户选择要运行的报告时,代码将从SQL查询中获取数据.代码将获取数据并找出将数据放入哪个类.然后,报告将获取该类,并使用该类中的数据填充报告.
这是我的困境,我如何使代码动态化,以便代码将指定的类转换为适当的类对象?
记住的例子:
gVar = Report;
(gVar.ReportClass)oClass = new gVar.ReportClass;
Run Code Online (Sandbox Code Playgroud) 为什么这段代码会编译
final ArrayList<?> dp1 = new ArrayList<String>();
Run Code Online (Sandbox Code Playgroud)
但事实并非如此
final ArrayList<ArrayList<?>> dp2 = new ArrayList<ArrayList<String>>();
Run Code Online (Sandbox Code Playgroud) 我想知道是否可以做某事.我有一个函数,它读取一个xml文件,并根据文件中的内容向表单添加控件.像这样的xml节点将创建它:
<Button Top="300" Left="100">Automatic</Button>
Run Code Online (Sandbox Code Playgroud)
我有一个函数,如果我在编辑模式下添加任何控件,则将控件保存回xml文件.它工作正常,但我想知道是否有更简单的方法.目前,我有这样的代码来创建每个控件的实例:
switch (xmlchild.Name)
{
// Create a new control whose type is specified.
case "Button":
c = new Button();
break;
case "Label":
c = new Label();
break;
default:
c = null;
break;
}
Run Code Online (Sandbox Code Playgroud)
但是,当我想使用更多类型的控件时,我需要不断添加开关案例.我可以做一些只需要文本并添加该类型控件的东西吗?我将不胜感激任何反馈!
谢谢!
为什么不抛出异常不明白,obj为null
object obj = null;
Console.WriteLine("Hello World " + obj);
Run Code Online (Sandbox Code Playgroud) 我正在努力加快以下方面的步伐:
string s; //--> s is never null
if (s.Length != 0)
{
<do something>
}
Run Code Online (Sandbox Code Playgroud)
问题是,看起来.Length实际上是对字符串中的字符进行计数,这比我需要的工作更多.有人知道如何加快速度吗?
或者,有没有办法确定s [0]是否存在,w/out检查字符串的其余部分?
当你看到IL中的一行时:
// Code size 25 (0x19)
Run Code Online (Sandbox Code Playgroud)
尼特实际意味着什么?它是在谈论(字节)内存使用情况吗?我能够收集的只是它比IL线的数量多一个.以下是完整的IL.
.method private hidebysig static void Execute(string y) cil managed
{
// Code size 25 (0x19)
.maxstack 8
IL_0000: nop
IL_0001: ldstr "string"
IL_0006: call void [mscorlib]System.Console::WriteLine(string)
IL_000b: nop
IL_000c: ldarg.0
IL_000d: callvirt instance class [mscorlib]System.Type [mscorlib]System.Object::GetType()
IL_0012: call void [mscorlib]System.Console::WriteLine(object)
IL_0017: nop
IL_0018: ret
} //
Run Code Online (Sandbox Code Playgroud)
当我查看ECMA_335文档时,它将代码大小定义为:代码(文本)部分的大小,或者如果有多个部分则所有代码部分的总和.(啊?)