我想向我的控制器方法添加属性,这些属性可以使用反射进行检查。
我可以看到如何通过编写一个过滤器来实现这一点,如果这是实现我想要的唯一方法的话,我将编写一个空的过滤器,但是我真正想要的只是一个可以用来生成文档的反射-可见属性。示例:
[OperatorFriendlyDescription("Begin a new message from a letter template and set initial properties.")]
public ActionResult Create(string editorName, int mastKey, ...)
我只是第一次尝试F#,并尝试它与C#项目的互操作。
我在C#项目中定义了自定义属性,并在新的F#项目中添加了对该项目的引用。当我尝试定义"let“语句的属性时,"let”是永久私有的,因此属性是否有效并不重要。当我尝试将"let“语句更改为其他语句时,例如"member",我被告知属性不能针对对象。如果我希望它是公共的并具有属性,我应该如何定义该函数?
module FSharp
type public MyClass() =
class
//this one will get the attributes, but is a
这在C#中似乎工作得很好:
class A : System.Attribute { public A() {} }
public class B
{
public int X
{
[A] get { return 1; }
[A] set { }
}
}
但是在F#中,当我尝试在属性的getter和setter上设置属性时,我无法避免一个语法错误:
type A() = inherit System.Attribute()
type B =
member this.X
with [<A>] g
当我尝试构建我的项目时,我得到了一个错误。'SSLAccessFiltercannot' be used as an attribute because it does not inherit from 'System.Attribute'
这里有没有人熟悉这个错误或者在这里看到了这个问题?提前感谢:)
编辑:添加了一些代码作为示例
<AcceptVerbs(HttpVerbs.Get), SSLAccessFilter(AccessType.NotAllowed)> Function GroupDiscussionView(ByVal elemen
我有以下三门课:
SingletonDrawer.cs:
using UnityEngine;
using UnityEditor;
[CustomPropertyDrawer(typeof(SingletonAttribute))]
public class SingletonDrawer : PropertyDrawer{
public override void OnGUI(Rect position, SerializedProperty property, GUIContent label){
}
}
SingletonAttribute.cs:
using Un
我在Mono上使用OrmLite和F#。
我有以下基本结构:
type NestedTree() =
static member val table_name = String.Empty with get, set
//DB fields
[<AutoIncrement>]
[<PrimaryKey>]
member val id = 0 with get, set
member val parent_id = Nullable<_>(null) with get, set
member val na
我在一个用属性标记的基类中有一个属性,并且我想更改我的每个派生类中的一些属性。做这件事最好的方法是什么?
据我所知,我必须在我的基类中将属性定义为抽象的,并覆盖每个基类中的属性,然后重新定义所有属性。这似乎真的是多余的,我对此并不着迷,因为我必须重复每个派生类中的公共属性。
这是我想要做的一个简化的例子。我想要更改派生类中的MyAttribute,但保持属性上的所有其他属性相同,并在一个地方定义(即,我不想多次重新定义XmlElement )。这有可能吗?或者有更好的方法来做这件事?还是我在这里完全误用了属性?
using System;
using System.Xml;
using
我有一个用户数据库,用户可以有不同的角色。
我希望为我的MVC Web API实现基本的身份验证,我希望能够使用Authorize标记标记方法,并将userType作为参数传递。
[Authorize(admin)]
public bool Test()
{
}
[Authorize(user)]
public bool Test1()
{
}
我不知道如何创建此属性,例如,如何创建一个简单地使方法始终返回false的属性
[AttributeUsage(AttributeTargets.All)]
public class TestAttribute: System.Attribute
考虑以下情况:
基类BaseAttribute有一个指定不可继承的AttributeUsageAttribute (Inherited = False)。
派生属性类DerivedAttribute继承自该基属性类。
基域类Base应用了派生属性。
从基域类继承的域类Derived被要求提供它的自定义属性,包括继承属性(inherit: true)。
以下是相应的代码:
using System;
using System.Linq;
namespace ConsoleApplication26
{
class Program
{
static voi
我想编写一个自定义属性,可以用它来装饰ViewModel属性,这样,当发布ViewModel时,我可以检查哪些属性具有这个属性,并运行一些逻辑。我正在尝试设置条件,这不应以任何方式影响验证。
[SetsCondition(SomeEnumerationValue)]
public Fund SelectedFund {get;set;}
...
other properties
然后在控制器里。
[HttpPost]
public IActionResult SelectFund(SelectFundViewModel model){
if(ModelState.IsValid){
问题很简单,而且。尽管答案显而易见,但我不得不面对一种奇怪的情况,fsharp告诉我一些有点奇怪的事情。故事是这样的:
问题是: F#会自动让每个类型继承Object类吗?我想是的,我可以肯定这一点,因为如果不是这样的话,就会有很多复杂的事情。
但这是一个事实。我正在写这段代码:
type MyType =
val myval: int
override self.ToString = "Hello MyType"
嗯,fsharp编译器告诉我使用overrid是不正确的,因为他没有找到任何名为ToString的方法来覆盖。我编译了这段代码:
type MyType
对于示例程序:
type public MyClass(reasonForLiving:string) =
member x.ReasonForLiving with get() = reasonForLiving
let classFactory () = MyClass("up to you")
let live () =
let instance = classFactory()
if instance = null then raise(System.Exception("null is not living... that's
我有以下C#类:
public class Foo {
protected virtual void Bar (){
}
}
public class Baz : Foo {
protected override void Bar (){
}
}
如果我回顾一下它们,方法栏总是在那里:
[<EntryPoint>]
let main args =
let methodFromFoo = typedefof<Foo>.GetMethod("Bar", BindingFlags.Instance ||| Bindin
我创建了具有AttributeUsage属性的简单类。当我试图构建时,我遇到了错误:
Attribute 'AttributeUsage' is only valid on classes derived from System.Attribute。
然后,我让类继承了属性,一切都很好。
如果我使用AttributeUsage属性,那么它将迫使我从Attribute类继承。我的问题是,我是否可以使强制方法具有特定签名的属性?
谢谢你的帮助!
我试图在F#中创建一个带有位置参数的属性,但总是失败。
type ColumnAttribute(?index:int,?name:string) =
inherit Attribute()
let mutable index = index
let mutable name = name
member x.Index
with get() = index
and set value = index <- value
member x.Name
with get() = name
给定以下类,如何从SampleAttribute拦截Class1.SampleMethod的值?谢谢
Public Class Class1
<SampleAttribute()> _
Public Function SampleMethod(ByVal Value As Integer) As Boolean
Return True
End Function
End Class
<AttributeUsage(AttributeTargets.Method)> _
Public Class SampleAttribute
我想用这样的方式标记一个参数,这样我可以通过反射读取标记。我之所以要这样做,是因为我正在创建映射到数据库的业务层对象,并且我希望将某些参数标记为“只读”,例如正在数据库中生成的uniqueidentifier字段。
我已经在迭代这些属性来填充参数。这是我如何赋值的片段..。
foreach (var prop in this.GetType().GetProperties())
{
switch (prop.PropertyType.Name)
{
case "Int32":
int tmpInt = -1;
if
在我看来,C#项目中看不到F#选项类型的某些属性。通过检查类型,我可以或多或少地看到原因,但我并不真正理解到底发生了什么,为什么做出了这些选择,或者如何最好地绕过这个问题。
以下是演示该问题的一些代码片段。我有一个包含两个项目的VS2015解决方案,一个是C#项目,一个是F#项目。在F#项目中,我有一个定义如下的类:
type Foo () =
member this.Bar () = Some(1)
此外,在F#中,我可以编写如下内容:
let option = (new Foo()).Bar()
let result = if option.IsNone then "Is
F#允许在类型的成员上约束泛型类型,类似于:
type ClassWithMemberConstraint<'T when 'T : (static member StaticProperty : unit)> =
class end
这可能非常方便,尤其是因为CLR不允许定义具有静态成员的接口。因为F#允许这样的约束,我猜这意味着CLR也允许泛型成员约束,但据我所知,这在C#中是不可能的。
有什么方法可以在C#中表达这种行为吗?
我有一个抽象课
public abstract class BaseClass
{
public abstract void CreateGraph(){}
}
[CustomAttribute(Property1 = value , Property2 = value2)]
public class Graph1 : BaseClass
{
public override void CreateGraph()
{
//implementation
}
}
如何使用CustomAttribute属性值创建Graph1的对象。这是一个创建对象的好方法
我有一个用System.Attribute类装饰的list属性。是否可以在属性级别对列表进行检查,使其仅包含不同的值?
[ConfigSettingList(typeof(string),Description="Contains a list of supported handheld devices . Default is the below list .")]
public List<string> HandHeldDevices
{
get
{
我有一个AllowPartiallyTrustedCallers类库,它包含System.DataAnnotations.ValidationAttribute的子类型。该库用于WCF服务的合同类型。
在.NET 2/3.5中,这种方法工作得很好。但是,自Visual调试器中运行.NET 4.0以来,运行服务的客户端将导致异常“按类型:‘( must of ValidationAttribute)违反的继承安全规则’。派生类型必须与基本类型的安全可访问性匹配,否则不可访问。”(System.TypeLoadException)
只有在满足下列所有条件时,才会出现错误:
assemblyrefl
我正在工作的ASP.net MVC4网站,并有模型和视图模型层。由于某些原因,我对模型和ViewModel中的几个属性有不同的名称
模型
public partial class Project
{
public string Desc {get; set;}
}
视图模型
public class ProjectViewModel
{
public string Description { get; set; }
}
现在,在模型层,如果属性的名称不同,我需要使用它的ViewModel名称。我正在考虑创建一个自定义属性,这样我就可以在模型中得到这样的内容:
public part
我正在读一些例子,我总是在方法之前看到一些代码,我想知道它叫什么,它是如何使用的。
你能定义你拥有的东西吗?或者有这些东西的定义列表?
下面是我发现的一些代码示例,它们使用这个东西,但是没有解释任何有关它的内容。
[HandleError]
public class HomeController : Controller
{
public ActionResult Index()
{
ViewData["Message"] = "Welcome to ASP.NET MVC!";
return View();
我试图用下面的代码创建一个自定义的.NET属性,但是意外地遗漏了子类。这会生成一个容易修复的编译器错误,如注释中所示。
// results in compiler error CS0641: Attribute 'AttributeUsage' is
// only valid on classes derived from System.Attribute
[AttributeUsage(AttributeTargets.Class)]
internal class ToolDeclarationAttribute
{
internal ToolDeclarati