现在C#支持命名参数,我正在检查它是否以与VB相同的方式实现,并发现存在细微差别.以这样的库函数为例:
public static void Foo(string a, string b)
{
Console.WriteLine(string.Format("a: {0}, b: {1}", a, b));
}
Run Code Online (Sandbox Code Playgroud)
在C#中,如果你这样称呼它:
Foo(a: "a", b: "b");
Run Code Online (Sandbox Code Playgroud)
编译器生成以下IL指令:
.locals init (
[0] string CS$0$0000,
[1] string CS$0$0001)
L_0000: nop
L_0001: ldstr "a"
L_0006: stloc.0
L_0007: ldstr "b"
L_000c: stloc.1
L_000d: ldloc.0
L_000e: ldloc.1
L_000f: call void [TestLibrary]TestLibrary.Test::Foo(string, string)
L_0014: nop
L_0015: ret
Run Code Online (Sandbox Code Playgroud)
这转换为以下C#代码:
string CS$0$0000 = "a";
string CS$0$0001 = "b";
Test.Foo(CS$0$0000, CS$0$0001);
Run Code Online (Sandbox Code Playgroud)
在VB中,如果你这样称呼它:
Foo(a:="a", b:="b")
Run Code Online (Sandbox Code Playgroud)
编译器生成以下IL指令:
L_0000: nop
L_0001: ldstr "a"
L_0006: ldstr "b"
L_000b: …
Run Code Online (Sandbox Code Playgroud) 场景是我有一个顶级窗口的窗口句柄列表,我想转移它们,所以它们按我选择的z顺序排列.我开始通过迭代列表(我希望最后的窗口最后一个),调用SetForegroundWindow
每个.这似乎在某些时候有效,但并非总是如此,当我在每次通话之间稍微暂停时,有所改善.
有一个更好的方法吗?
编辑:
它看起来像BeginDeferWindowPos
/ DeferWindowPos
/ EndDeferWindowPos
route是要走的路.但是,我似乎无法让它一次使用多个窗口.当我将窗口列表限制为单个窗口时,它可以正常工作.当列表有多个窗口时,它似乎只能获得其中一个窗口.这是我正在做的伪代码:
HWND[] windows;
HWND lastWindowHandle = 0;
HDWP positionStructure = BeginDeferWindowPos(windows.length);
for (int i = 0; i < windows.length; i++)
{
positionStructure = DeferWindowPos(positionStructure, windows[i],
lastWindowHandle, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
}
EndDeferWindowPos(positionStructure);
Run Code Online (Sandbox Code Playgroud)
我确定这是一个小/明显我在这里失踪的东西,但我只是没有看到它.
我正在尝试使用servicestack在monotouch中序列化一个对象,我不能在我的生活中弄清楚如何在为设备进行AOT构建时使类可用.构建适用于模拟器.我有Monotouch的最新版本,以及Monotouch ServiceStack库的最新版本,我今天早上自己拉出并构建了它.
我要做的是调用泛型ToJson()来序列化我的模型对象(下面称为Note).我的所有Web服务模型/服务调用/序列化/反序列化都发生在我的iphone和android应用程序外部的类库中,我试图在其中调用JsConfig.RegisterForAot()和JsConfig.RegisterTypeForAot(),这似乎没有帮助.我也在我的iPhone应用程序中调用这些方法,因为我不确定这两个位置是否都是必要的.
错误/堆栈跟踪:
Attempting to JIT compile method 'ServiceStack.Text.Common.WriteListsOfElements`2<int, ServiceStack.Text.Json.JsonTypeSerializer>:WriteListValueType (System.IO.TextWriter,object)' while running with --aot-only. See http://docs.xamarin.com/ios/about/limitations for more information.
at ServiceStack.Text.Common.WriteType`2[MyClassLibrary.Note,ServiceStack.Text.Json.JsonTypeSerializer].WriteProperties (System.IO.TextWriter writer, System.Object value) [0x00000] in <filename unknown>:0
at ServiceStack.Text.JsonSerializer.SerializeToString (System.Object value, System.Type type) [0x00000] in <filename unknown>:0
at ServiceStack.Text.JsonSerializer.SerializeToString[Object] (System.Object value) [0x00000] in <filename unknown>:0
at ServiceStack.Text.StringExtensions.ToJson[Object] (System.Object obj) [0x00000] in <filename unknown>:0
at MyClassLibrary.Utils.ObjectToJson (System.Object obj) [0x00000] in <filename unknown>:0
at MyClassLibrary.Utils.AddObjectToData (System.Net.WebRequest request, System.Object obj) [0x00000] in <filename unknown>:0
at MyClassLibrary.Utils.SendJsonRequest[Note] (System.String url, System.String …
Run Code Online (Sandbox Code Playgroud) 我是那种如何编写我的代码的人
if(...)
{
}
Run Code Online (Sandbox Code Playgroud)
但每次我这样做,Xamarin Studio会自动将我的代码更改为此
if(...){
}
Run Code Online (Sandbox Code Playgroud)
我该如何改变?