Tag: 属性

如何使用C#中的属性列表反序列化元素

嗨,我有以下Xml反序列化: <Item FavouriteColour="Blue" Age="12" 当我不知道密钥名称或将有多少属性时,如何使用属性键值对列表反序列化Item元素?

像C#中的属性字典一样处理对象

我希望能够使用属性的名称作为键来访问像字典这样的对象中的属性值。 我不关心值是否作为对象返回,因此Dictionary很好。 这是预期用途: object person = new { Name: “Bob”, Age: 45 }; IDictionary lookup = new PropertyDictionary(person); string name = (string)person[“Name”]; person[“Age”] = (int)person[“Age”] + 1; // potentially editable 我本来要为此实现我自己的类,但后来我开始注意像DynamicObject这样的类实现了IDictionary接口,这让我觉得这已经在某个地方为我做了。 我想要的是类似于ASP.NET MVC使用的function,允许使用匿名类型来设置HTML标记属性。 我有很多使用字典作为数据源的类,但大多数时候我也应该能够传入对象。 因为这是一个通用库 ,我想我会创建一个可重用的类,只使用IDictionary接口装饰一个对象。 它将使我免于造成过载的爆炸。

扩展枚举,矫枉过正?

我有一个对象需要序列化为EDI格式。 对于这个例子,我们会说它是一辆汽车。 汽车可能不是b / c选项随时间变化的最佳示例,但对于真实对象,Enums永远不会改变。 我有许多枚举,如下所示应用了自定义属性。 public enum RoofStyle { [DisplayText(“Glass Top”)] [StringValue(“GTR”)] Glass, [DisplayText(“Convertible Soft Top”)] [StringValue(“CST”)] ConvertibleSoft, [DisplayText(“Hard Top”)] [StringValue(“HT “)] HardTop, [DisplayText(“Targa Top”)] [StringValue(“TT “)] Targa, } 通过扩展方法访问属性: public static string GetStringValue(this Enum value) { // Get the type Type type = value.GetType(); // Get fieldinfo for this type FieldInfo fieldInfo = […]

属性的MinValue和MaxValue属性

是否可以创建可以限制数字的最小值或最大值的属性。 例: [MinValue(1), MaxValue(50)] public int Size { get; set; } 当我做Size = -3; Size值必须为1。 我在谷歌搜索过,找不到关于这种行为的单一例子,也许是因为它无法制作? 我将在属性网格中使用这些属性,因此具有自动validation可以很方便。 目前我像这样解决方法来限制最小值: private int size; [DefaultValue(8)] public int Size { get { return size; } set { size = Math.Max(value, 1); } } 所以这就像MinValue(1)

在所有者类中使用属​​性vs后备字段

我喜欢C#中自动实现的属性,但最近有一只大象站在我的小隔间里,我不知道该怎么办。 如果我使用自动实现的属性(以下称“aip”),那么我不再需要内部使用的私有支持字段。 这很好,因为aip没有副作用。 但是如果稍后我需要在get或set中添加一些额外的处理呢? 现在我需要创建一个后备字段,这样我就可以扩展我的getter和setter。 这适用于使用该类的外部代码,因为它们不会注意到差异。 但是现在所有对aip的内部引用都会在访问属性时调用这些副作用。 现在,必须重构对ate aip的所有内部访问才能使用后备字段。 所以我的问题是,大多数人都做了什么? 您是使用自动实现的属性还是更喜欢始终使用后备字段? 您对具有副作用的属性有何看法?

使用属性覆盖属性

我正试图找到一种方法来改变属性的序列化行为。 可以说我有这样的情况: [Serializable] public class Record { public DateTime LastUpdated {get; set; } // other useful properties … } public class EmployeeRecord : Record { public string EmployeeName {get; set; } // other useful properties … } 现在我想序列化EmployeeRecord。 我不希望序列化Record类的LastUpdated属性。 (我确实希望在序列化Record时序列化LastUpdated)。 首先,我尝试使用new关键字隐藏LastUpdated属性,然后添加XmlIgnore属性: public class EmployeeRecord : Record { public string EmployeeName {get; set; } [XmlIgnore] public […]

NewtonSoft在runTime添加JSONIGNORE

我希望使用NewtonSoft JSON序列化一个列表,我需要在序列化时忽略其中一个属性,我得到以下代码 public class Car { // included in JSON public string Model { get; set; } // ignored [JsonIgnore] public DateTime LastModified { get; set; } } 但我在我的应用程序中的许多地方使用此特定类汽车,我想只在一个地方排除选项。 我可以在我需要的特定位置动态添加[JsonIgnore]吗? 我怎么做 ?

如何通过属性包装方法?

我想知道是否可以通过添加属性来包装方法。 示例:我想记录方法执行的执行时间。 [LogTimings] public void work() { .. } 这是一种将方法包装到另一种方法中( 参见此python实现 )。

从C#中的通用对象获取属性

请看一下这段代码: public void BindElements(IEnumerable dataObjects) { Paragraph para = new Paragraph(); foreach (T item in dataObjects) { InlineUIContainer uiContainer = this.CreateElementContainer(item.FirstName ????? ) para.Inlines.Add(uiContainer); } FlowDocument flowDoc = new FlowDocument(para); this.Document = flowDoc; } 在Visual Studio“item.XXX”中编写时,我应该从我的权限中获取属性,如.FirstName或.LastName。 我不知道数据对象是IEnumerable还是IOrder等……它必须是通用的! 如何获得真实属性表单项? 只有反思?

C#字段与属性

可能重复: C#中属性和字段的区别 我认为基本属性( { get; set; } )与公共字段相同,只是能够在不破坏二进制兼容性的情况下更改它们。 按照我的答案https://stackoverflow.com/a/8735303/331785 ,我发现属性也有缺点。 如果它们是值类型,则无法通过引用访问它们。 为什么会这样,还有其他什么差异?