草庐IT

c# - 通过自定义结构类型验证原始 .NET 值类型 : Is it worth the effort?

我正在尝试通过将原始.NET值类型包装在自定义struct中来使原始.NET值类型更加类型安全和更加“self记录”。但是,我想知道在现实世界的软件中是否真的值得付出努力。(That"effort"canbeseenbelow:Havingtoapplythesamecodepatternagainandagain.We'redeclaringstructsandsocannotuseinheritancetoremovecoderepetition;andsincetheoverloadedoperatorsmustbedeclaredstatic,theyhavetobedefin

c# - 将结构与 WCF 服务一起使用

对于使用结构作为WCF服务的返回类型是否有官方建议?我目前正在与一个不是我编写的服务进行交互,我发现自己受到启发去询问是否有必要让我感到烦恼。我过去一直使用类-部分原因可能是示例总是显示的内容,但正如我现在所想的那样,出于其他“直觉”原因:我通过定义一个单独的项目来开始契约(Contract)风格,该项目的接口(interface)表示将由服务来回传递的类型。我经常使用LINQ,因此可空性测试对于引用类型是隐式的,而对于结构和其他值类型,我总是需要将其标记为可为空。虽然我承认它比我脑海中的项目符号列表更直观,但我会立即想到这些。我想问这个问题是因为我正在处理返回结构的服务并且在处理返回

c# - 什么时候使用 C# 结构(值类型)会牺牲性能?

我一直在玩弄结构作为隐式验证复杂值对象的机制,以及围绕更复杂类的通用结构以确保有效值。我对性能后果有点无知,所以我希望大家能帮助我。例如,如果我要执行类似将域对象注入(inject)值类型包装器之类的操作,这会导致问题吗?为什么?我理解值类型和引用类型之间的区别,我的目标是利用值类型的不同行为。为了负责任地做到这一点,我到底需要研究什么?这是我正在考虑的事情的一个非常基本的想法。publicstructNeverNullwhereT:class,new(){privateNeverNull(Treference){_reference=reference;}privateT_refer

c# - 为什么绑定(bind)到结构不起作用?

我最近遇到了一个问题,我有一个ObservableCollection绑定(bind)到一个ListView。人是我写的结构。只要我在绑定(bind)之前设置People对象的值,一切似乎都正常。但是,当我尝试在运行时从GUI设置值时,底层对象似乎并未反射(reflect)更改。我最终通过简单地将People从结构更改为类来克服了这个问题。无需进行其他更改。谁能给我解释一下这是为什么? 最佳答案 您的绑定(bind)获取结构的副本,因为结构是按值传递给方法的。如果绑定(bind)更新了一些东西;某处内存中的副本正在被修改,因此您的原

c# - 什么时候结构比类好?

这个问题在这里已经有了答案:WhenshouldIuseastructratherthanaclassinC#?(31个答案)关闭9年前。副本:WhentousestructinC#?在Microsoft.NET2.0/3.5中使用结构而不是某些类是否有实际原因?“结构和类有什么区别?”-这可能是“.NET开发人员”职位空缺面试中最受欢迎的问题。面试官认为唯一正确的答案是“结构分配在堆栈上,类分配在堆上”,并且没有进一步询问。一些谷歌搜索显示:a)structureshavenumerouslimitationsandnoadditionalabilitiesincomparisont

C# : How does this work : Unit myUnit = 5;

我刚刚注意到您可以在C#中执行此操作:UnitmyUnit=5;不必这样做:UnitmyUnit=newUnit(5);有谁知道我如何使用自己的结构实现这一目标?我查看了带有反射器的Unit结构并注意到正在使用TypeConverter属性,但是在我为我的结构创建自定义TypeConverter之后我仍然无法让编译器允许这种方便的语法。 最佳答案 您需要提供一个从int到Unit的隐式转换运算符,如下所示:publicstructUnit{//theconversionoperator...publicstaticimplicito

c# - 当 T 是结构时,List<T>.Find 如何工作?

我有一个List>.我需要按照以下方式做一些事情list.Find(x=>x.Key=="foobar")但是,如果列表中不存在,行为会是什么?通常它会返回null,但结构不能为null。 最佳答案 我的建议是对不可为null的类型使用FindIndexintindex=list.FindIndex(x=>x.Key=="foobar");if(index>=0){//found!UseResult(list[index]);}如果Find()不成功,返回默认值default(T)。对于不可空类型,此结果无法与具有默认值的常规条目区

C# Struct 没有无参数构造函数?看看我需要完成什么

我正在使用结构传递给非托管DLL-[StructLayout(LayoutKind.Sequential)]publicstructvalTable{publicbytetype;publicbytemap;publicbytespare1;publicbytespare2;publicintpar;publicintmin;publicbyte[]name;publicvalTable(){name=newbyte[24];}}上面的代码将无法编译,因为VS2005会提示“Structscannotcontainexplicitparameterlessconstructors”。为

c# - 获取对数组内部结构的引用

我想修改数组内部结构的字段,而不必设置整个结构。在下面的示例中,我想在数组中设置元素543的一个字段。我不想复制整个元素(因为复制MassiveStruct会影响性能)。classP{structS{publicinta;publicMassiveStructb;}voidf(refSs){s.a=3;}publicstaticvoidMain(){S[]s=newS[1000];f(refs[543]);//Error:Anobjectreferenceisrequiredforthenon-staticfield,method,orproperty}}有没有办法在C#中做到这一点?

c# - 如何确定类型是自定义结构?

对于一个Type,在C#中有一个属性IsClass,但是如何判断一个Type是一个struct呢?虽然IsValueType是必要条件,但显然是不够的。因为int也是一种值类型。有人建议如下代码:boolIsStruct=type.IsValueType&&!type.IsEnum&&!type.IsPrimitive;但我不确定这是否是一种准确的方法。该公式应说明结构与其他类型(例如DateTime、int和arrays)之间的区别。正如一些friend指出的那样,这里我指的是用户定义的结构而不是预定义的类型,例如DateTime。 最佳答案