草庐IT

c# - 是否可以在 C# 中使用一组变量/动态字段声明匿名类型?

在C#中,我想弄清楚是否可以声明一个匿名类型,其中的字段直到运行时才知道。例如,如果我有一个键/值对列表,我可以根据该列表的内容声明一个匿名类型吗?我正在处理的具体情况是将参数传递给Dapper,我事先不知道我将拥有多少参数。List>paramList=newList>(){newTuple("key1","value1"),newTuple("key2","value2")...};我想将此List(或等效的Map)转换为匿名类型,我可以将其作为查询参数传递给Dapper。所以理想情况下,如果定义为匿名类型,上面的列表将看起来像这样:new{key1=value1,key2=val

c# - 什么时候应该使用字段而不是属性?

谁能清楚地说明在类设计中何时使用字段以及何时使用属性?考虑:publicstringName;或者:privatestring_Name;publicstringName{get{return_Name;}set{_Name=value;}}我意识到第二种方法更合适和灵活,所以这就是我通常尝试使用的方法。但为什么我看到人们使用第一种方法呢?他们只是懒惰,还是在某些特定情况下这是正确的选择?这只是一个偏好问题吗? 最佳答案 在C#3.0中,您实际上可以编写:publicstringName{get;set;}这让你既得体又懒惰。一般来

c# - 尽管具有相同代码的字段工作正常(在 C# MVC、ASP.Net Core 中),但 DateTime 验证不起作用

编辑1只是澄清几点,日期时间选择器/脚本似乎工作正常,时间和日期是可选的,并按预期使用正确的值填充文本框。当用户在文本框中手动输入时间/日期并输入无效时间(即“78/5/201712:00”或“12/5/201712:62”)时会出现此问题我已经更新了代码中的拼写错误,错误仍然出现在更正后的代码中。我祈祷我错过了一些明显的东西,因为这对我来说毫无意义。您能提供的任何帮助将不胜感激。我在问题的末尾包含了我的代码。问题我有两个DateTime字段,它们包含在我的应用程序页面的表单中:StartTime和EndTime。这两个字段都使用(我认为是)相同的代码设置并放到页面上。StartTim

c# - 字符串字段长度限制和换行

我遇到的情况似乎很常见,但到目前为止我还没有找到好的解决方案。因此,后端有MSSQL数据库的ASP.NET-MVC应用程序。该模型包括A类,其字符串字段Description需要限制在100个字符以内。声明如下:[StringLength(100)]publicvirtualstringDescription{get;set;}数据库中对应的列是nvarchar,列长度=100。在UI中,描述字段由ma​​xlength=100的文本区域表示。现在,当文本区域中出现换行符时,问题就来了。它们在客户端被解释为1个字符,但在服务器端它们由Environment.NewLine表示,它是2个

c# - C# 中的可变字段

来自规范10.5.3可变字段:volatile字段的类型必须是以下之一:引用类型。类型byte,sbyte,short,ushort,整数、单位、字符、float、bool值、System.IntPtr或System.UIntPtr。具有枚举基类型的枚举类型byte,sbyte,short,ushort,int,或单位。首先我想确认我的理解是正确的:我猜想上面的类型可能是易变的,因为它们在内存中存储为一个4字节的单元(对于引用类型,因为它的地址),这保证了读/写操作是原子的。double/long/etc类型不能是易失的,因为它们不是原子读/写,因为它们在内存中超过4个字节。我的理解正

c# - 为什么向结构体添加一个额外的字段会大大提高其性能?

我注意到包装单个float的结构比直接使用float要慢得多,性能只有大约一半。usingSystem;usingSystem.Diagnostics;structVector1{publicfloatX;publicVector1(floatx){X=x;}publicstaticVector1operator+(Vector1a,Vector1b){a.X=a.X+b.X;returna;}}然而,在添加额外的“额外”字段后,似乎发生了一些神奇的事情,性能再次变得更加合理:structVector1Magic{publicfloatX;privateboolmagic;public

c# - MVC 脚手架正在复制我的模型字段

我似乎遇到了一个奇怪的问题,经过几个小时的摸索,我似乎已经将问题缩小到partialclasses的组合。和virtualproperties.当我重写位于单独文件中的部分类中的属性时,MVC会复制我View中的字段。我使用的是VisualStudio2013,可以按照以下步骤重现该问题:打开VisualStudio并创建一个新项目。在类别下选择Web,然后选择“ASP.NETWeb应用程序”。我的目标是.NET4.5。从模板选择中选择“空”,然后选中MVC复选框以添加核心文件夹和引用。项目创建后,右键单击Models文件夹并创建一个名为MyModel.cs的新类。将这些行添加到新文件

c# - 为什么我不能使用 XmlSerializer 序列化只读字段?

XmlSerializer不序列化只读字段、只读属性(仅使用getter)、私有(private)字段等。此外,如果类没有无参数构造函数,它也不会序列化对象。我的问题:据我所知,这些问题的出现是因为在反序列化时无法访问(和更改)私有(private)(和只读)字段。但是如果我不反序列化呢?我没有这个选项吗?由于同样的原因(反序列化问题),如果类没有无参数构造函数,它不会序列化对象。但是当我添加一个私有(private)的无参数构造函数时,它工作正常。怎么办?我不喜欢为每个类都添加一个无参数构造函数,并将所有字段设为公共(public)和非只读,只是为了能够对其进行序列化。现在我在私有(

c# - 如何使用 Entity Framework 设计可配置的字段级权限

假设我们有一个关于某些车型的信息表,例如:如果我还需要规则是用户可配置的,我将如何最好地实现字段级访问权限以进行读取和写入操作?我正在使用MSSQLServer2016和EF6。基于该表,我们可能有以下用例,它们描述了对特定角色或组可见的字段:1)公共(public)数据的默认权限组2)基于实体的权限组3)基于自定义字段的权限组要求是,隐藏数据必须与NULL值不同,并且规则/权限必须是用户可配置的。我还需要对列表进行分页,这需要对可见数据进行正确排序。为此,我需要一种处理数据类型的方法。例如,build年份是一个不可为null的DateTime,但当该字段不可见时,需要将其设置为默认值

c# - 在显式结构中将多个 CLR 引用字段相互重叠?

编辑:我很清楚这对值类型非常有效,我的具体问题是关于将它用于引用类型。Edit2:我还知道您不能在结构中叠加引用类型和值类型,这仅适用于将多个引用类型字段相互叠加的情况。我一直在研究.NET/C#中的结构,我刚刚发现您可以这样做:usingSystem;usingSystem.Runtime.InteropServices;namespaceConsoleApplication1{classFoo{}classBar{}[StructLayout(LayoutKind.Explicit)]structOverlaid{[FieldOffset(0)]publicobjectAsObje