Tag: C#的

按引用传递数组

如何通过引用传递一个静态分配的数组? void foo(int (&myArray)[100]) { } int main() { int a[100]; foo(a); } (&myArray)[100]是否有任何意义,或者它只是一个通过引用传递数组的语法? 我不明白单独的括号后面跟着大括号。 谢谢。

深空检查,有没有更好的办法?

注意:这个问题在引入之前被问过.? 运算符在C#6 / Visual Studio 2015中 。 我们都在那里,我们有一些像cake.frosting.berries.loader这样的深层属性,我们需要检查它是否为null,所以没有例外。 要做的方法是使用短路if语句 if (cake != null && cake.frosting != null && cake.frosting.berries != null) … 这不完全是优雅的,也许应该有一个更简单的方法来检查整个链,看看它是否出现在空variables/属性。 是否有可能使用某种扩展方法,或者它是一种语言function,还是只是一个坏主意?

检测堆栈粉碎

我正在执行我的a.out文件。 执行后程序运行一段时间,然后退出消息: **** stack smashing detected ***: ./a.out terminated* *======= Backtrace: =========* */lib/tls/i686/cmov/libc.so.6(__fortify_fail+0x48)Aborted* 可能的原因是什么?如何纠正?

浮点与双精度

下面的代码 float x = 3.141592653589793238; double z = 3.141592653589793238; printf("x=%f\n", x); printf("z=%f\n", z); printf("x=%20.18f\n", x); printf("z=%20.18f\n", z); 会给你输出 x=3.141593 z=3.141593 x=3.141592741012573242 z=3.141592653589793116 输出741012573242的第三行是垃圾,第四行116是垃圾。 双打总是有16位有效数字,而花车总是有7位有效数字? 为什么不打双打有14位有意义的数字?

如何在枚举中使用枚举作为标志?

处理enum的标志在C#中通过[Flags]属性很好地工作,但是在C ++中这样做的最好方法是什么? 例如,我想写: enum AnimalFlags { HasClaws = 1, CanFly =2, EatsFish = 4, Endangered = 8 }; seahawk.flags = CanFly | EatsFish | Endangered; 但是,我得到有关int / enum转换的编译器错误。 有没有更好的方式来expression这一点,而不仅仅是钝器铸造? 最好,我不想依赖来自第三方库,如boost或Qt的构造。 编辑:如答案中所示,我可以通过将seahawk.flags声明为int来避免编译器错误。 但是,我想有一些机制来强制types安全,所以有人不能写seahawk.flags = HasMaximizeButton 。

dynamic(C#4)和var有什么区别?

我已经阅读了大量有关C#v4新增关键字的文章,但我无法弄清楚“dynamic”和“var”之间的区别。 这篇文章让我想起了,但是我仍然看不出有什么不同。 难道你可以只使用“var”作为局部variables,但作为本地和全球dynamic? 对于我的无知,我感到抱歉,但是你能显示一些没有dynamic关键字的代码,然后用dynamic关键字显示相同的代码吗?

函数作为模板parameter passing

我正在寻找涉及传递C ++模板函数作为参数的规则。 这由C ++支持,如下例所示: #include <iostream> void add1(int &v) { v+=1; } void add2(int &v) { v+=2; } template <void (*T)(int &)> void doOperation() { int temp=0; T(temp); std::cout << "Result is " << temp << std::endl; } int main() { doOperation<add1>(); doOperation<add2>(); } 但是,了解这种技术是困难的。 谷歌search“function作为模板参数”不会导致太多。 而经典的C ++模板完全指南令人惊讶地也不讨论它(至less不是我的search)。 我有的问题是这是否是有效的C ++(或只是一些广泛支持的扩展)。 另外,有没有办法让一个具有相同签名的仿函数在这种模板调用过程中与显式函数交替使用? 在上面的程序中至less在Visual C ++中不起作用,因为语法显然是错误的。 如果你想定义一个自定义的比较操作,那么能够为一个函子转换一个函数是相当不错的,反之亦然,类似于你可以传递一个函数指针或函子到std […]

通过使用string值进行reflection来设置属性

我想通过Reflection来设置一个对象的属性,其值为stringtypes。 所以,举个例子,假设我有一个Ship类, Latitude属性是double 。 这是我想要做的: Ship ship = new Ship(); string value = "5.5"; PropertyInfo propertyInfo = ship.GetType().GetProperty("Latitude"); propertyInfo.SetValue(ship, value, null); 就这样,这将抛出一个ArgumentException : “System.String”types的对象不能转换为“System.Double”types。 如何根据propertyInfo将值转换为正确的types?

错误消息“无法加载一个或多个请求的types。 检索LoaderExceptions属性以获取更多信息。

我已经使用entity framework ,SQL Server 2000,Visual Studio 2008和企业库开发了一个应用程序。 它在本地工作绝对正常,但是当我将项目部署到我们的testing环境时,出现以下错误: 无法加载一个或多个请求的types。 检索LoaderExceptions属性以获取更多信息 堆栈跟踪:在System.Reflection.Module._GetTypesInternal(StackCrawlMark&stackMark) 在System.Reflection.Assembly.GetTypes() 在System.Data.Metadata.Edm.ObjectItemCollection.AssemblyCacheEntry.LoadTypesFromAssembly(LoadingContext上下文) 在System.Data.Metadata.Edm.ObjectItemCollection.AssemblyCacheEntry.InternalLoadAssemblyFromCache(LoadingContext上下文) (System.Data.Metadata.Edm.ObjectItemCollection.AssemblyCacheEntry.LoadAssemblyFromCache(Assembly assembly,Boolean loadReferencedAssemblies,Dictionary 2 knownAssemblies, Dictionary 2&typesInLoading,List`1&errors) 在System.Data.Metadata.Edm.ObjectItemCollection.LoadAssemblyFromCache(ObjectItemCollection objectItemCollection,程序集程序集,布尔loadReferencedAssemblies) 在System.Data.Metadata.Edm.ObjectItemCollection.LoadAssemblyForType(typestypes) 在System.Data.Metadata.Edm.MetadataWorkspace.LoadAssemblyForType(typestypes,程序集callsAssembly) 在System.Data.Objects.ObjectContext.CreateQuery [T](String queryString,ObjectParameter [] parameters) entity framework似乎有问题,任何线索如何解决它?

查看/编辑MP3文件的ID3数据

使用C#查看和编辑ID3标签(艺术家,专辑等)的快捷方式是什么?