Tag: C#的

不能将types'Int'隐式转换为'T'

我可以调用Get<int>(Stat); 或Get<string>(Name); 但编译时我得到: 不能将types'int'隐式转换为'T' string一样的东西。 public T Get<T>(Stats type) where T : IConvertible { if (typeof(T) == typeof(int)) { int t = Convert.ToInt16(PlayerStats[type]); return t; } if (typeof(T) == typeof(string)) { string t = PlayerStats[type].ToString(); return t; } }

有条件的XOR?

C#怎么没有一个条件XOR操作符? 例: true xor false = true true xor true = false false xor false = false

在'for'循环中增加1时,格式化的技术原因是什么?

在整个networking中,代码示例都有for循环,如下所示: for(int i = 0; i < 5; i++) 而我使用以下格式: for(int i = 0; i != 5; ++i) 我这样做是因为我相信它更有效率,但在大多数情况下,这确实很重要吗?

允许与不匹配完整性级别的.NET COM服务器连接

我有一个基于COM的客户端服务器设置的问题。 COM服务器用C#(.NET 4.0)编写,并作为(注册的)本地服务器运行。 取决于哪个应用程序连接到服务器,其他客户端将收到服务器执行失败(HRESULTexception:0x80080005(CO_E_SERVER_EXEC_FAILURE) 这里解释了底层的问题(在COM部分是完整性感知) 。 我了解它的方式是由于高级应用程序创build具有更高完整性级别的服务器而造成的。 当另一个未升级的应用程序连接时,不允许连接到同一个实例。 当一个非提升的应用程序创build该进程时,会发生同样的情况。 我试图实现页面上描述的解决scheme:修改registry以设置应允许所有客户端连接的安全描述符。 在C ++中有一个代码示例 ,但是这在.NET中有效地实现了相同的function: // Security Descriptor with NO_EXECUTE_UP var sd = new RawSecurityDescriptor("O:BAG:BAD:(A;;0xb;;;WD)S:(ML;;NX;;;LW)"); byte[] securityDescriptor = new Byte[sd.BinaryLength]; sd.GetBinaryForm(securityDescriptor, 0); RegistryKey key = Registry.ClassesRoot.OpenSubKey("AppID\\{APP-ID-GUID}", true); if (key == null) { key = Registry.ClassesRoot.CreateSubKey("AppID\\{APP-ID-GUID}"); } using (key) { key.SetValue("LaunchPermission", securityDescriptor, RegistryValueKind.Binary); } 但是,这并没有达到预期的效果。 当第二个客户端试图创build有问题的对象的实例时,Windows会尝试启动我的COM服务器的一个单独的实例,但服务器阻止两个实例作为相同的用户运行。 鉴于我设定的权限,我不希望第二个实例首先启动。 由于其中一个客户端应用程序在Medium […]

在roslyn降低了操作

当在Roslyn中引入操作时,其中一个目标就是提供降低的操作(我认为这是在devise审查会议video中),据我所知应该为高级隐式编译器操作提供显式操作。 我在Roslyn看到降低目录,但是课程在那里。 现在有可能降低操作或没有公共API可用? 在下面的示例操作中,已经删除了一些隐式部分 – 为expression式主体添加return语句,并为重载操作符显示符号。 但是前后增量仅仅因种类而异。 using Microsoft.CodeAnalysis; using Microsoft.CodeAnalysis.CSharp; using Microsoft.CodeAnalysis.CSharp.Syntax; using Microsoft.CodeAnalysis.Semantics; using System.Linq; namespace so39468373 { internal static class Program { private static void Main() { var tree = CSharpSyntaxTree.ParseText(@" public class c { public static c operator ++(co) { return o; } static c pre(co) => ++o; static c post(co) […]

Unicode在C + + 11

我一直在阅读Unicode的主题 – 特别是在C ++ 11中的UTF-8(非)支持,我希望Stack Overflow的专家能够向我保证我的理解是正确的,或者指出我误解的地方或错过的地方。 一个简短的总结 首先,你可以在源代码中定义UTF-8,UTF-16和UCS-4文字。 此外, <locale>头文件包含了几个可以在UTF-8,UTF-16,UCS-4和平台多字节编码之间进行转换的std::codecvt实现(尽pipeAPI看起来很温和,但小于直截了当)。 这些codecvt实现可以imbue()在stream上,以便在读取或写入文件(或其他stream)时进行转换。 [ 编辑: Cubbi指出,我忽略了提及<codecvt>标题,它提供了不依赖于语言环境的std::codecvt实现。 此外, std::wstring_convert和wbuffer_convert函数可以使用这些codecvt来直接转换string和缓冲区,而不依赖于stream。] C ++ 11还包括C99 / C11 <uchar.h>头文件,其中包含将平台多字节编码(可能是也可能不是UTF-8)的单个字符转换成UCS-2和UCS-4的函数。 但是,这是关于它的程度。 虽然你当然可以将UTF-8文本存储在std::string ,但是我没有办法看到对它做任何有用的事情。 例如,除了在你的代码中定义一个文字,你不能validation一个字节数组是否包含有效的UTF-8,你不能找出长度(即Unicode字符的数量,对于“字符” )包含一个UTF-8的std::string ,并且不能以字节为单位以任何方式迭代std::string 。 同样,即使C ++ 11增加了std::u16string也不是真的支持UTF-16,而只是老的UCS-2 – 它不支持代理对,只留下了BMP。 意见 鉴于UTF-8是几乎所有Unix派生系统(包括Mac OS X和 * Linux)上处理Unicode的标准方法,并且已经基本成为网上事实上的标准,所以在现代C ++中缺乏支持像一个非常严重的遗漏。 即使在Windows上,新的std::u16string并不真正支持UTF-16的事实似乎有些遗憾。 *正如在评论中指出的,在这里明确指出,Mac OS的BSD派生部分使用UTF-8,而Cocoa使用UTF-16。 问题 如果您设法阅读所有这些,谢谢! 只是几个简单的问题,因为这是堆栈溢出毕竟… 上面的分析是否正确,或者是否有其他Unicode支持设施? 在过去几年中,标准委员会在推动C ++向前发展方面做了出色的工作。 他们都是聪明的人,我认为他们很清楚上述缺点。 是否有一个众所周知的原因,Unicode支持在C ++中仍然很差? outlook未来,有没有人知道有什么scheme可以纠正? 快速searchisocpp.org似乎没有透露任何东西。 […]

在Objective C中提取pdf文本

到目前为止,我还没有find一个解决scheme,可以很好地从Objective C的pdf文件中提取文本,以便在iPhone上使用。 我发现了一些标准的C代码,并修改它的工作原理,并认为我会在这里提供它,因为到目前为止,我已经使用了stackoverflow很多,但从来没有回报。 你可以在这里: https : //github.com/zachron/pdfiphone 它将pdf文件的path作为input,并返回pdf中文本的nsstring。 我没有写大部分,但我修改了它,所以它可以与iPhone和Objective C一起工作。如果有人拿这个,你需要在你的项目中包含Zlib库(在iPhone上的libz.dylib)它更令人敬畏,那就是美好的时光。

为什么不把`std :: initializer_list`定义为文字types?

这是这个问题的一个后续问题: 声明一个constexpr的initializer_list对象是否合法? 。 自C ++ 14以来, std::initializer_list类的所有方法都用constexpr标记。 用constexpr std::initializer_list<int> list = {1, 2, 3};来初始化一个实例是很自然的constexpr std::initializer_list<int> list = {1, 2, 3}; 但Clang 3.5抱怨list没有被一个常量expression式初始化。 正如在注释中指出的 , std::initializer_list是一个字面types的任何要求似乎已经从规格中消失。 如果我们甚至不能初始化它,那么将一个类定义为constexpr有什么意义呢? 这是标准中的一个疏忽,将在未来得到修复吗?

为什么引用程序集中的DbParameterCollection抽象中有三个属性,否则是虚拟的?

我将项目从project.json移动到新样式的csproj格式,它包含从DbParameterCollection派生的类。 在我真正的项目中,我正在使用多目标,但为了这个问题的目的,我们只需要关心net45 。 编译器告诉我,我必须重写以前没有的三个属性: IsFixedSize IsReadOnly IsSynchronized 如果你遵循这些文档链接(这是用于.NET 4.5),你会看到所有的属性是虚拟的 – 而不是抽象的。 如果我只是通过调用csc构build代码,一切都很好……只有在使用.NET Core SDK时才会遇到问题。 以下是重现问题的示例代码: 项目文件: <Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>net45</TargetFramework> </PropertyGroup> </Project> C#代码: using System; using System.Collections; using System.Data.Common; public class DummyParameterCollection : DbParameterCollection { public override int Count => 0; public override object SyncRoot => null; public override void Remove(object value) {} public override […]

Visual Studio立即窗口 – Lambdaexpression式不允许 – 是否有解决方法或替代?

我在VS 2010中debugging了一些棘手的generics基于列表的代码 – 大量的层次结构处理等。当然,lambdaexpression式和匿名方法是不允许在立即窗口内,我不能通过代码步进在通常的方式,因为我仍然试图让我的头在层次结构… 任何人都可以提出一个解决方法或替代工具?