我认为标题是自我解释的.只想更改Visual Studio 2012的外观,不要以全部大写字母显示菜单标题.
在C#中,结果Math.Round(2.5)
为2.
应该是3,不是吗?为什么它是2而不是C#?
在C#3.5中是否有一种方法可以使用反射来设置对象属性?
例如:
MyObject obj = new MyObject();
obj.Name = "Value";
Run Code Online (Sandbox Code Playgroud)
我想obj.Name
用反思来设定.就像是:
Reflection.SetProperty(obj, "Name") = "Value";
Run Code Online (Sandbox Code Playgroud)
有办法做到这一点吗?
Windows 8引入了WinRT,它类似于.NET但不受管理.为什么不受管理?这是性能问题吗?这是否意味着垃圾收集不适合低级API?
受到SO问题的启发.Attribute类对IsDefined()方法有几个重载.涵盖的是应用于Assembly,Module,MemberInfo,ParameterInfo的属性.MemberInfo重载包括PropertyInfo,FieldInfo,EventInfo,MethodInfo,ConstructorInfo.
这需要处理大多数AttributeTargets.除了一个biggy:Attribute.IsDefined(Type,Type)没有重载,因此您可以检查是否在类上定义了属性.或者结构,委托或枚举.
并非这是一个真正的问题,Type.GetCustomAttributes()可以解决这个问题.但是所有的BlahInfo类型都有这个.我不知道缺乏对称性.我无法理解为什么这对Type来说会有问题.猜测遗传问题并没有向我解释.在混合中使用ValueType可能是一个领先者,但仍然没有意义.我不买"他们忘了",他们从不这样做.
为什么这个过载丢失了?
这是我发现的短短数天前,我得到了确认,这并不仅仅局限于我的机器从这个问题.
重新编写它的最简单方法是启动Windows窗体应用程序,添加一个按钮并编写以下代码:
private void button1_Click(object sender, EventArgs e) {
MessageBox.Show("yada");
Environment.Exit(1); // Kaboom!
}
Run Code Online (Sandbox Code Playgroud)
执行Exit()语句后程序失败.在Windows窗体上,您会收到"创建窗口句柄时出错".
启用非托管调试可以清楚地了解发生了什么.在COM模式循环正在执行,并允许待递送WM_PAINT消息.处置表格上的这是致命的.
到目前为止我收集的唯一事实是:
我特别感兴趣的是你可能做些什么来避免这次崩溃.特别是AppDomain.UnhandledException场景让我感到困惑; 没有很多方法可以终止.NET程序.请注意,调用Application.Exit()或Form.Close()在UnhandledException的事件处理程序中无效,因此它们不是变通方法.
更新:Mehrdad指出终结器线程可能是问题的一部分.我想我已经看到了这一点,并且我也看到了CLR给终结器线程完成执行的2秒超时的一些证据.
终结器位于NativeWindow.ForceExitMessageLoop()内.那里有一个IsWindow()Win32函数,大致对应于代码位置,在32位模式下查看机器代码时偏移量为0x3c.似乎IsWindow()正在陷入僵局.我无法获得内部的良好堆栈跟踪,但调试器认为P/Invoke调用刚刚返回.这很难解释.如果你能获得更好的堆栈跟踪,那么我很乐意看到它.矿:
System.Windows.Forms.dll!System.Windows.Forms.NativeWindow.ForceExitMessageLoop() + 0x3c bytes
System.Windows.Forms.dll!System.Windows.Forms.NativeWindow.Finalize() + 0x16 bytes
[Native to Managed Transition]
kernel32.dll!@BaseThreadInitThunk@12() + 0xe bytes
ntdll.dll!___RtlUserThreadStart@8() + 0x27 bytes
ntdll.dll!__RtlUserThreadStart@8() + 0x1b bytes
Run Code Online (Sandbox Code Playgroud)
ForceExitMessageLoop调用之上没有任何内容,启用了非托管调试器.
I need to the the bin path of the executing assembly. How do you get it? I have a folder Plugins in the Bin/Debug and I need to get the location
有没有办法通过Visual Studio中的一个或多个文件的快捷方式组织C#使用(删除和排序,单独或一起)?
我知道这可以通过选择一个文件的菜单来完成
Edit > IntelliSense > Organize Usings > Remove and Sort
但我想更快地做到这一点.我正在使用Visual Studio 2013 Express进行C#开发(想知道如何在旧版和其他版本中完成此操作).先感谢您.
我知道我可以使用密封以防止其他类继承某个类,但是是否可以允许继承但是可以防止覆盖某些虚拟方法?
根据微软文档,[BigInt]
数据类型似乎没有定义的最大值,理论上可以容纳无限大的数字,但我发现在第 28 位之后,一些奇怪的事情开始发生:
PS C:\Users\Neko> [BigInt]9999999999999999999999999999
9999999999999999999999999999
PS C:\Users\Neko> [BigInt]99999999999999999999999999999
99999999999999991433150857216
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,在第一个命令1 上,BigInt
按预期工作,但是还有一个数字,它转换99999999999999999999999999999
为的地方似乎发生了一些衰减,99999999999999991433150857216
但是,提示不会引发任何错误,您可以继续添加更多数字,直到第 310 个数字
PS C:\Users\Neko> [BigInt]99999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
100000000000000001097906362944045541740492309677311846336810682903157585404911491537163328978494688899061249669721172515611590283743140088328307009198146046031271664502933027185697489699588559043338384466165001178426897626212945177628091195786707458122783970171784415105291802893207873272974885715430223118336
PS C:\Users\Neko\> [BigInt]999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
Run Code Online (Sandbox Code Playgroud)
这将抛出错误
At line:1 char:318
+ ... 999999999999999999999999999999999999999999999999999999999999999999999
+ ~
The numeric constant 99999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
99999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
99999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999 is not valid.
+ CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : BadNumericConstant
Run Code Online (Sandbox Code Playgroud)
我认为这是一个控制台问题而不是一个BigInt
问题,因为错误没有提到[BigInt]
数据类型,不像其他数据类型的数字太大
PS C:\Users\Neko> [UInt64]18446744073709551615
18446744073709551615
PS C:\Users\Neko> [UInt64]18446744073709551616
Cannot convert value "18446744073709551616" to …
Run Code Online (Sandbox Code Playgroud) c# ×8
.net ×6
reflection ×2
.net-core ×1
bigint ×1
inheritance ×1
overriding ×1
powershell ×1
properties ×1
refactoring ×1
rounding ×1
windows ×1
windows-8 ×1