- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想以特定顺序检索对象中的字段。我找到了一种使用反射来检索字段的方法,但不能保证每次都以相同的顺序返回字段。这是我用来检索字段的代码:
ReleaseNote rn = new ReleaseNote();
Type type = rn.GetType();
FieldInfo[] fi = type.GetFields(BindingFlags.Instance | BindingFlags.NonPublic);
我找到了 this answer to another question ,其中解释了如何添加自定义属性并使用它对字段进行排序。基于此,我认为我需要更新我的代码以通过创建自定义属性“MyOrderAttribute”来按排序顺序检索字段,我将使用该属性对 FieldInfo 数组进行排序。
我在这里创建了属性并将其添加到我的字段中:
namespace TestReleaseNotes
{
[AttributeUsage(AttributeTargets.Field, AllowMultiple = false)]
public class MyOrderAttribute : Attribute
{
public MyOrderAttribute(int position)
{
this.Position = position;
}
public int Position { get; private set; }
}
class ReleaseNote
{
[MyOrder(0)]
private string title;
[MyOrder(1)]
private string status;
[MyOrder(3)]
private string implementer;
[MyOrder(3)]
private string dateImplemented;
[MyOrder(4)]
private string description;
这里我尝试使用属性对字段列表进行排序:
ReleaseNote rn = new ReleaseNote();
Type type = rn.GetType();
FieldInfo[] fi = type.GetFields(BindingFlags.Instance | BindingFlags.NonPublic).OrderBy(f => f.Position);
这给了我错误“‘FieldInfo 不包含‘Position’的定义,并且找不到接受‘FieldInfo’类型的第一个参数的可访问扩展方法‘Position’(您是否缺少 using 指令或程序集引用?)”
我还尝试了 GetCustomAttribute 方法,它会产生错误“'MyOrderAttribute' 是一种类型,在给定的上下文中无效”:
FieldInfo[] fi = type.GetFields(BindingFlags.Instance | BindingFlags.NonPublic).OrderBy(f => f.GetCustomAttribute(MyOrderAttribute);
访问 MyOrderAttribute 并使用它对我的字段进行排序的正确语法是什么?
最佳答案
使用以下表达式:
FieldInfo[] fi = type.GetFields(BindingFlags.Instance | BindingFlags.NonPublic).OrderBy(f => (int?)(f.CustomAttributes.Where(a=>a.AttributeType==typeof(MyOrderAttribute)).FirstOrDefault()?.ConstructorArguments[0].Value) ?? -1).ToArray();
?.和 ??运算符在这里处理没有排序属性的字段。它默认为 -1 中的非有序字段(即在有序列表的开头)。将其替换为 int.MaxValue
,或 9999 以将未排序的字段放在末尾。
关于c# - 使用自定义属性对 FieldList 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54448294/
我正在使用 Flask 和 Flask-WTF,我需要创建一个包含多个具有相似结构的 block (子表单)的表单(例如具有一个 SelectField 和一个 TextAreaField 的子表单)
我想以特定顺序检索对象中的字段。我找到了一种使用反射来检索字段的方法,但不能保证每次都以相同的顺序返回字段。这是我用来检索字段的代码: ReleaseNote rn = new ReleaseNote
我有以下表格, class AddForm(wtf.Form): tags = TagListField("Tags (comma separated)", validators=[wtf.R
我使用 WTForms FieldList字段列表的字段。它获取这些输入字段的值,这些值按它们在 form.data 中的名称排序。但我想按照它们在表单中出现的顺序获取值。覆盖 process 函数是
wtforms FieldList && 验证出现问题...应该说该字段必须有Int值,而不是This field is required为什么 f.data 具有 [None, 2, None] 值
将FieldList与WTForms一起使用时,通过验证时遇到麻烦。我不断收到此错误。 {'csrf_token': [u'CSRF token missing']}。问题是,如果我在FieldLis
我正在使用 WTForm 来验证我直接从 javascript 模型提交的表单(通过挖空填充)。在我的表单中,我有一个可以动态添加/删除的银行帐户列表。在 python 方面,我有这样的东西: cla
我有这个订单表格,允许我的用户创建订单。一个订单由 (producetype, quantity) 的多个元组组成. Producetype 应在 中呈现形式而数量可以只是一个输入。 produce
我有一个 flask + wtforms 应用程序,我希望用户能够在其中输入父对象和任意数量的子对象。我不确定从用户界面动态创建新子表单输入字段的最佳方式是什么。 到目前为止我得到了什么 下面是一个完
我们有以下表单,我们正在尝试为每个组创建 GroupRoleForms 列表。 class FullNameMixIn(): full_name = TextField( 'F
我在 Filling WTForms FormField FieldList with data results in HTML in fields 上看到了同样的奇怪行为我的原始字段使用 HTML
这个问题已经有答案了: How to populate wtform select field using mongokit/pymongo? (2 个回答) 已关闭 4 年前。 类似于这个问题: D
我在 FieldList 中的 FormField 中有一个自定义字段:locations class LocationForm(Form): id = HiddenField('id')
我有一个带有 flask-wtf 的表单用于上传图片,文件字段也可以多个字段。 我的表单: class ComposeForm(Form): attachment = FieldList(Fi
我正在使用 Flask 构建网站我在其中使用 WTForms .在 Form 中,我现在想使用 FormFields 的 FieldList,如下所示: class LocationForm(Form
我正在尝试使用 WTF 字段、FormField、FieldList 创建一个 ListItem 表单: forms.py class WarehouseTicketItemForm(Form):
确实缺乏有关如何使用 WTForms 的 FieldList 的文档。因此,多亏了互联网,我才能够将以下内容组合在一起: 表格: class BranchForm(Form): name =
我正在尝试创建一个动态表单(在 python Flask 应用程序中)使用WT 表格。 WTForms 包含一个用于字段列表的 FieldList 字段。我想用它来制作一个表单,用户可以在其中添加或删
我想生成带有复选框的文件列表。我试过使用 FieldList 但它没有像我预期的那样工作。我得到的不是带有指定文件名的复选框,而是带有以包含 FieldList 对象的变量命名的标签的复选框。有什么办
我有一个 Flask 应用程序,我可以通过上传一个 CSV 文件来填充表单数据,然后读取该文件。我想用从 CSV 读取的数据填充一个 FieldList。但是,当我尝试填充数据时,它会将原始 HTML
我是一名优秀的程序员,十分优秀!