我已经习惯了新的IDE(它是vc#express),但第一次接触有些令人困惑.当我打开"添加引用"对话框并切换到.NET选项卡时,程序集列表上方的标签指出:"已过滤到:.NET Framework 4".这是真的 - 我只能引用.NET 4.0程序集以及XNA 3.1之类的东西.但是我无法看到较旧的程序集,即Managed DirectX库,它们显然安装在我的计算机上,因为在vc#08中添加ref对它们没有任何问题.
这是什么?如何更改过滤器?标签是只读的.这些听起来像沉闷的家伙的问题,但我找不到答案,但没有直观的解决方案.
提前致谢.
有很多文章和讨论解释了为什么构建线程安全类是好的.据说如果多个线程同时访问例如一个字段,则只会产生一些不良后果.那么,保持非线程安全代码的重点是什么?我主要关注.NET,但我认为主要原因不依赖于语言.
例如,.NET静态字段不是线程安全的.如果默认情况下它们是线程安全的,结果会是什么?(无需执行"手动"锁定).使用(实际上默认为)非线程安全有什么好处?
我想到的一件事是性能(更多的是猜测).这是相当直观的,当函数或字段不需要是线程安全的时,它不应该是.但问题是:为什么?线程安全只是您需要实现的额外数量的代码吗?在什么情况下我可以100%确定例如一个字段不会被两个线程同时使用?
这里只是一个好奇的问题.
当您在iOS平台上为Unity编写插件时,插件具有有限的本机到托管回调功能(从插件再到Unity).基本上这个文档: iOS插件Unity文档
说明你能够回拨的函数签名是这样的:
只能从本机代码调用与以下签名对应的脚本方法:function MethodName(message:string)
C中定义的签名如下所示:
void UnitySendMessage(const char*obj,const char*method,const char*msg);
所以这几乎意味着我只能将字符串发送回Unity.
现在在我的插件中,我使用protobuf-net来序列化对象并将它们发送回Unity以进行反序列化.我已经让这个工作,但通过一个解决方案,我觉得非常丑陋,并不是非常优雅:
Person* person = [[[[[Person builder] setId:123]
setName:@"Bob"]
setEmail:@"bob@example.com"] build];
NSData* data = [person data];
NSString *rawTest = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
UnitySendMessage("GameObject", "ReceiveProductRequestResponse", [rawTest cStringUsingEncoding:NSUTF8StringEncoding]);
Run Code Online (Sandbox Code Playgroud)
基本上我只是将字节流编码为字符串.在Unity中,我然后获取字符串的字节并从那里反序列化:
System.Text.UTF8Encoding encoding=new System.Text.UTF8Encoding();
Byte[] bytes = encoding.GetBytes(message);
Run Code Online (Sandbox Code Playgroud)
这确实有效.但是真的没有办法做到这一点吗?也许有人知道如何以某种替代方式完成它?
我们假设有一个带有虚拟属性的类(我们称之为'P').它在派生类中被覆盖.现在我想使用这样的东西:
obj.GetType().GetProperty("P")
获取有关覆盖属性的信息.此搜索是不明确的,因为有两个"P"属性(基础和覆盖).所以我键入:obj.GetType().GetProperty("P", BindingFlags.DeclaredOnly |
BindingFlags.Public | BindingFlags.Instance)
它只返回覆盖的"P",但如果在编译时我无法猜测是否有覆盖呢?后一个调用将返回null.如果继承的层次结构更大,那么情况就更复杂了.
换句话说,我希望获得"最顶层"覆盖,否则 - 基本属性.实现目标的最简洁方法是什么?目前我只知道一个是查看所有属性并检查名称和声明类型.
我试图在 WPFKeyGesture
类的帮助下执行一些 WPF 命令。应用程序工作正常,直到我指定一个由Shift修饰符和字母数字键组成的组合键。例如,以下实例化:new KeyGesture(Key.M, ModifierKeys.Shift)
引发异常:
KeyGesture 不支持“Shift+M”键和修饰符组合。
裸Shift修饰符也不适用于数字(例如Shift+ 2)。但是,Shift+Insert或Shift+F1组合完美无缺。简单说一下,Shift+ Ctrl、Shift+Alt或Alt+1等没有问题。
为什么决定禁止Shift+ [字母数字] 手势?它与输入大写字母有什么共同之处吗?是否有与 WPF 命令系统一致的解决方法?(注意:我不是在填充文本框时尝试使用Shift+M手势,而是在没有文本框处于焦点时。)
我似乎只找到一个论坛条目,其中提出了这个问题。文档搜索失败。开发人员避免Shift+ [字母数字]是否如此明显?
是否有可能在我的C#项目中添加对x86和x64中不同dll版本的引用(并在更改配置模式时自动切换它们)?
我想获取在.csproj
给定以下要求中引用的所有程序集的路径:
.dll
导入)关于如何为项目参考做这件事有一个很好的答案:
<MSBuild Projects="@(ProjectReference)" Targets="GetTargetPath">
<Output TaskParameter="TargetOutputs" ItemName="MyReferencedAssemblies" />
</MSBuild>
Run Code Online (Sandbox Code Playgroud)
有没有类似的方法来获取.dll
所有其他类型引用的路径?
c# ×5
.net ×2
c ×1
keystroke ×1
msbuild ×1
objective-c ×1
properties ×1
protobuf-net ×1
reflection ×1
wpf ×1