async void
单元测试无法在Visual Studio 2012中运行:
[TestClass]
public class MyTestClass
{
[TestMethod]
public async void InvisibleMyTestMethod()
{
await Task.Delay(1000);
Assert.IsTrue(true);
}
}
Run Code Online (Sandbox Code Playgroud)
如果我想要进行异步单元测试,则测试方法必须返回一个Task:
[TestMethod]
public async Task VisibleMyTestMethod()
{
await Task.Delay(1000);
Assert.IsTrue(true);
}
Run Code Online (Sandbox Code Playgroud)
为什么会这样?不是说我绝对需要async void
测试方法,我只是好奇.构建async void
测试方法时,Visual Studio 2012不会发出警告或错误,即使它无法运行...
我有一个C#注释,它是:
[AttributeUsage(AttributeTargets.Method)]
public class OperationInfo : System.Attribute {
public enum VisibilityType {
GLOBAL,
LOCAL,
PRIVATE
}
public VisibilityType Visibility { get; set; }
public string Title { get; set; }
public Func<List<string>, List<string>> Func;
public OperationInfo(VisibilityType visibility, string title, Func<List<string>, List<string>> function) {
Visibility = visibility;
Title = title;
Func = function;
}
}
Run Code Online (Sandbox Code Playgroud)
如您所见,有一个属性是Func,我想动态调用它.基本上,我想解析具有此注释的所有方法,然后调用绑定到注释的Func.
我想像这样使用它(这是一个echo函数的简单示例,它获取一个字符串并返回相同的字符串):
[OperationInfo(OperationInfo.VisibilityType.GLOBAL, "echo", IDoEcho)]
public static string DoEcho(string a)
{
return a;
}
[OperationInfo(OperationInfo.VisibilityType.PRIVATE, null, null)]
public static List<string> IDoEcho(List<string> param) {
return new List<string>() …
Run Code Online (Sandbox Code Playgroud) 我目前有一个Portable Class Library
代码与常规完全兼容,Class Library
没有任何修改.
我想知道是否有现有软件自动进行转换; 我查看了Visual Studio工具,但找不到任何合适的工具.在写我自己之前我只是想确定一下!
考虑以下测试:
public void FooTest(decimal? val)
{
Check.That(true).IsTrue();
}
Run Code Online (Sandbox Code Playgroud)
我想用极值(即MaxValue
和MinValue
)来运行这个测试.
[TestCase(decimal.MaxValue)]
Run Code Online (Sandbox Code Playgroud)
这会输出以下错误:属性参数必须是属性参数类型的常量表达式,typeof表达式或数组创建表达式
[TestCase(79228162514264337593543935)]
Run Code Online (Sandbox Code Playgroud)
我现在得到这个:积分常数太大了
最后一次绝望的尝试:
[TestCase(79228162514264337593543935M)]
Run Code Online (Sandbox Code Playgroud)
显然,由于强制转换,我得到了这个:属性参数必须是属性参数类型的常量表达式,typeof表达式或数组创建表达式
如何用decimal.MaxValue
参数编写单元测试?我可以为这个有问题的案例编写一个特定的测试,但我想知道是否有办法写TestCase
这样的.
考虑以下:
void Foo(int start, int end)
{
int mid = (start + end) / 2;
}
void Bar(int start, int end)
{
int mid = (start + end) * 0.5;
}
Run Code Online (Sandbox Code Playgroud)
为什么Foo
编译成功而不成功Bar
?除以2
隐式方式将结果转换为一段int
时间乘以0.5
得到的未转换double
:
无法将类型'double隐式转换为int.存在显式转换(您是否错过了演员?)
这背后的C#语言设计师的推理是什么?
我有一个Windows Phone 8项目和另一个用C++编写的项目; 两者都在同一个解决方案中.C++项目是WP8项目中使用的动态库,它被配置为.winmd
在.dll
文件顶部生成Windows Metada文件().
在WP8项目中将C++项目添加为项目引用时,一切都运行良好.
但是,我想直接引用二进制文件而不是项目,所以我尝试引用.dll
自身,但VS2012不会让我(我完全理解,因为库不受我理解的管理)..winmd
相反,添加文件是有效的,我的意思是它编译时没有警告/错误; 但它在运行时崩溃(TargetInvocationException
因为无法找到C++库的"实际"代码,我得到了一个).
添加.winmd
文件时,我确保.dll
文件旁边的文件.将这两个文件放在bin
WP8项目的目录中也不起作用.
我在互联网上找不到任何线索,如果你能给我一些,我将不胜感激,欢迎任何提示!
这是我正在尝试设置的简单架构的架构:
这是引发异常的堆栈跟踪:
at System.StubHelpers.StubHelpers.GetWinRTFactoryObject(IntPtr pCPCMD)
at Sqlite.Sqlite3.sqlite3_open_v2(String filename, Database& db, Int32 flags, String zVfs)
at SQLite.SQLite3.Open(String filename, Database& db, Int32 flags, IntPtr zVfs)
at SQLite.SQLiteConnection..ctor(String databasePath, SQLiteOpenFlags openFlags, Boolean storeDateTimeAsTicks)
at SQLite.SQLiteConnection..ctor(String databasePath, Boolean storeDateTimeAsTicks)
at WP8ClassLibrary.SomeManager..ctor(String databasePath)
at WP8App.SomeViewModel..ctor()
at WP8App.MainPage..ctor()
Run Code Online (Sandbox Code Playgroud) TLDR:当使用查找的字段不为空时,为什么在查找中禁用group by子句?
我想对表单中的字段进行自定义查找.该表CTable
如下所示:
Val Spec
------------
A alpha
A beta
A gamma
B delta
C epsilon
Run Code Online (Sandbox Code Playgroud)
查找仅涉及Val
使用具有基本关系的EDT定义的列:Val == CTable.Val
查找显然给了我一个这样的列表:
A
A
A
B
C
Run Code Online (Sandbox Code Playgroud)
让我们去一个小组来摆脱所有重复的As,我想!有点像:
QueryBuildDataSource.orderMode(OrderMode::GroupBy);
QueryBuildDataSource.addGroupByField(fieldNum(CTable, Val));
Run Code Online (Sandbox Code Playgroud)
现在出现了我的奇怪行为以及我的问题的实际观点.在一个空字段上,group by被正确执行,我得到了这个:
A
B
C
Run Code Online (Sandbox Code Playgroud)
现在让我们在查找中选择"A",然后再次执行查找,因为我想点击"B".现在,group by已被禁用,原因不明,我得到的结果与之前的结果相同.
为什么会这样?我怎么能克服这个?
我试图同时运行几个任务,我遇到了一个似乎无法理解或解决的问题.
我以前有这样的功能:
private void async DoThings(int index, bool b) {
await SomeAsynchronousTasks();
var item = items[index];
item.DoSomeProcessing();
if(b)
AVolatileList[index] = item; //volatile or not, it does not work
else
AnotherVolatileList[index] = item;
}
Run Code Online (Sandbox Code Playgroud)
我想用for
循环调用Task.Run()
.但是我找不到向这个发送参数的方法,Action<int, bool>
并且每个人都建议在类似的情况下使用lambdas:
for(int index = 0; index < MAX; index++) { //let's say that MAX equals 400
bool b = CheckSomething();
Task.Run(async () => {
await SomeAsynchronousTasks();
var item = items[index]; //here, index is always evaluated at 400
item.DoSomeProcessing();
if(b)
AVolatileList[index] …
Run Code Online (Sandbox Code Playgroud) 可以通过定义如下类来使用自定义转换器:
public class MyCustomConverter : JsonConverter
{
public override bool CanConvert(Type objectType)
{
return objectType == typeof(MyCustomType);
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
throw new NotImplementedException();
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
var ret = new MyCustomType();
return ret;
}
}
Run Code Online (Sandbox Code Playgroud)
然后像这样使用它:
MyCustomType item = JsonConvert.DeserializeObject<MyCustomType>(jsonString, new MyCustomTypeConverter());
Run Code Online (Sandbox Code Playgroud)
我的问题是,在处理 列表时如何应用这个反序列化器MyCustomType
?基本上我有一个 Json 数组 ( [{ ... }, { ... }]
),我想在数组的每个项目上使用上面的转换器来获取List<MyCustomType>
.
我知道我可以使用该对象及其方法手动完成此操作JArray
,但我想知道是否有更简单、更干净的方法来完成此操作。
这是一个简化的上下文。 …
众所周知,a struct
是一个值类型,因此被分配在堆栈上(例如,在类中装箱的特定情况除外).
但是让我们考虑一下struct
:
public struct TestStruct
{
public List<int> items;
}
internal class Program
{
private static void Main(string[] args)
{
TestStruct g;
}
}
Run Code Online (Sandbox Code Playgroud)
我们TestStruct
g
不是类的成员,而是Main
函数中声明的"独立"变量.它符合stack
分配变量的要求.
但是,如果我写:
g.items = new List<int>();
Run Code Online (Sandbox Code Playgroud)
items
是分配的heap
不是吗?是否g
"走出去"的heap
呢?items
时g
会发生什么(即
GC
必须完成其工作items
)?List<int>
我们有一个实现类型的变量IDisposable
,那么最佳的行动方案是什么呢?PS:我知道可以(应该?)class
在这种情况下使用a 而不是a struct
.我只是对这个具体案例感到困惑.
c# ×8
.net ×3
unit-testing ×2
async-await ×1
asynchronous ×1
attributes ×1
axapta ×1
c#-5.0 ×1
decimal ×1
dll ×1
json.net ×1
lambda ×1
nunit ×1
reflection ×1
x++ ×1