小编Gre*_*les的帖子

C#和VB如何处理命名参数之间的差异?

现在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)

.net c# vb.net c#-4.0

19
推荐指数
2
解决办法
1640
查看次数

使用Win32 API更新许多Windows的Z顺序

场景是我有一个顶级窗口的窗口句柄列表,我想转移它们,所以它们按我选择的z顺序排列.我开始通过迭代列表(我希望最后的窗口最后一个),调用SetForegroundWindow每个.这似乎在某些时候有效,但并非总是如此,当我在每次通话之间稍微暂停时,有所改善.

有一个更好的方法吗?


编辑:

它看起来像BeginDeferWindowPos/ DeferWindowPos/ EndDeferWindowPosroute是要走的路.但是,我似乎无法让它一次使用多个窗口.当我将窗口列表限制为单个窗口时,它可以正常工作.当列表有多个窗口时,它似乎只能获得其中一个窗口.这是我正在做的伪代码:

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)

我确定这是一个小/明显我在这里失踪的东西,但我只是没有看到它.

windows winapi z-order

7
推荐指数
2
解决办法
7132
查看次数

尝试在Monotouch上使用ServiceStack序列化自定义对象时出现AOT编译错误

我正在尝试使用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)

rest json xamarin.ios servicestack

3
推荐指数
1
解决办法
844
查看次数

如何改变Xamarin Studio格式化代码的方式?

我是那种如何编写我的代码的人

if(...)
{

}
Run Code Online (Sandbox Code Playgroud)

但每次我这样做,Xamarin Studio会自动将我的代码更改为此

if(...){

}
Run Code Online (Sandbox Code Playgroud)

我该如何改变?

xamarin xamarin-studio

0
推荐指数
1
解决办法
794
查看次数