我有一个可以分配给类的自定义属性[FooAttribute].我想在属性中做的是确定哪种类型实际使用了我.如果我有:
[FooAttribute]
public class Bar
{
}
Run Code Online (Sandbox Code Playgroud)
在FooAttribute的代码中,我如何确定添加了我的Bar类?我不是专门寻找Bar类型,我只是想用反射设置一个友好的名字.例如
[FooAttribute(Name="MyFriendlyNameForThisClass")]
public class Bar
{
}
public class FooAttribute()
{
public FooAttribute()
{
// How do I get the target types name? (as a default)
}
}
Run Code Online (Sandbox Code Playgroud) 我需要找到一种方法来显示自定义属性的值,而不是下图中显示的"产品名称".
分组产品表http://www.magentocommerce.com/images/uploads/grouped_prod_front.gif
我正在使用/app/design/frontend/default/defaultx/template/catalog/product/view/type/grouped.php
下面的代码不起作用(自定义属性是年份):
<?php if (count($_associatedProducts)): ?>
<?php foreach ($_associatedProducts as $_item): ?>
<tr>
<td><?php echo $this->htmlEscape($_item->getYearmade()) ?></td>
Run Code Online (Sandbox Code Playgroud)
任何帮助,将不胜感激.
编辑:所以答案结果很简单.你看到我上面没有提到的是确实有输出......但它只是一个数字(例如:52).原来这是该自定义属性值的ID(它是自定义属性的Dropdown类型).
总结
这适用于文本类型的自定义属性:
echo $this->htmlEscape($_item->getYearmade())
Run Code Online (Sandbox Code Playgroud)
但对于所有其他类型的自定义属性(我认为),应使用以下内容:
echo $this->htmlEscape($_item->getAttributeText('yearmade'))
Run Code Online (Sandbox Code Playgroud)
如果没有Alan Storm提供的最优秀的答案,我就不会发现这一点.谢谢你,先生.
我正在寻找在参数中放置属性的合理用例列表.
我可以想一下方法中属性的一些好例子,但似乎看不到参数属性的良好用法.拜托,赐教.
那么方法的返回类型的属性呢?
这个问题是不相关的jQuery本身,而是我发现了一个名为插件Metadata发现有和示例之一使用自定义标签属性:<li data="{some:'random', json: 'data'}">...</li>.
问:这是跨浏览器吗?验证标记时会失败吗?
谢谢.
我正在尝试为我的MVC应用程序实现一种新的基于权限的访问方法; 我们有几个权限组,每个组都包含一个权限列表.例如,我们有Invoices权限组,其中包含CreateInvoice,RemoveInvoice,etc权限密钥.
在这种方法中,每个mvc Action都需要特定的执行权限.我正在尝试通过CustomAttributes执行此操作,如下所示:
public class InvoiceController : Controller
{
[RequirePermission(Permissions.Invoices.CreateInvoice)]
public ActionResult Create()
{
return View();
}
}
Run Code Online (Sandbox Code Playgroud)
为了让开发人员更容易记住不同的权限组和权限密钥,我正在尝试创建一个预定义的权限列表,该权限应该是权限组和权限密钥的组合.但由于在C#中使用属性参数的限制,我无法使其工作.(我不想制作一个额外的大型枚举器并将所有权限密钥放在那里)
我的最后一次尝试是为每个权限组创建一个枚举器,然后在其中将权限键定义为枚举常量:
public class PermissionEnums
{
[PermissionGroup(PermissionGroupCode.Invoice)]
public enum Invoices
{
CreateInvoice = 1,
UpdateInvoice = 2,
RemoveInvoice = 3,
ManageAttachments = 4
}
[PermissionGroup(PermissionGroupCode.UserAccounts)]
public enum UserAccounts
{
Create = 1,
ChangePassword = 2
}
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我们在这里有代码组合,使用PermissionGroup属性指定的权限组密钥和在每个枚举常量上指定为数字代码的权限密钥的代码.
RequirePermission属性定义如下:
public class RequirePermissionAttribute : Attribute
{
private Enum _Permission; …Run Code Online (Sandbox Code Playgroud) 我有一个工厂方法,根据三个枚举值返回正确的子类.一种方法是使用开关中的开关.显然,我不太喜欢这个选项.
我认为另一种选择是在C#中使用属性.每个子类都有一个具有3个枚举值的属性,并且在工厂中我只需要获得具有与工厂中的枚举值相对应的相同枚举值的类.
但是,我对属性很新,我在网上找不到任何合适的解决方案.如果有人,可以给我一些提示或一些代码行,我真的很感激!
有没有办法可以在匿名类型的属性上放置属性?还是匿名型本身?如果不是在你创建它时,也许之后通过反射?
作为潜在的使用场景,让我借用Dapper:
提供参数以在Dapper中执行查询时,您以匿名类型提供参数:
connection.Query<Foo>(sql, new { Id = guid, Condition = true });
Run Code Online (Sandbox Code Playgroud)
假设我需要传达一些关于映射的内容,比如我们可以将布尔值存储为文本T/ F(可怕,但对现实生活体验很可悲),所以我想为该属性添加一个属性Condition来告诉Dapper如何映射它(再次这个是一个稍微强迫的例子).那可能吗?
出于某种原因,当通过TestCaseattrubute 将参数传递给测试时,我得到以下关于第一个参数的错误消息,在本例中是一个数组:
这不是有效的常量表达式或自定义属性值
module GameLogicTest =
open FsUnit
open NUnit.Framework
open GameLogic.Examle
// This is not a valid constant expression or custom attribute value
[<TestCase( [| 1; 2; 3 |], 3, 1,1)>]
let ``let example.`` (a, m, h, c) =
a
|> proof1 m
|> should equal (h,c)
Run Code Online (Sandbox Code Playgroud)
但是当从属性和方法本身中删除最后一个参数时,一切正常.
[<TestCase( [| 1; 2; 3 |], 3, 1)>]
let ``let example.`` (a, m, h) =
a
|> proof1 m
|> should equal (h,1)
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?我最好也定义一个元组int * int但它似乎也不起作用.
f# custom-attributes constant-expression fsunit parameterized-tests
我正在努力将Windows 8.1通用应用程序升级到Windows 10 UWP应用程序.在我的Windows 10 UWP应用程序中,有一部分代码在之前完全无法正常工作.
我有一个看起来像这样的枚举:
public enum EStaticFile
{
[StringValue("Path of a file")]
CONFIG_FILE_1,
[StringValue("Path of a file")]
CONFIG_FILE_2
}
Run Code Online (Sandbox Code Playgroud)
当我尝试获取任何枚举值的属性时,它总是返回一个空数组.我使用以下代码:
public static StringValue GetStringValueAttribute(this Enum aEnumValue)
{
Type type = aEnumValue.GetType();
FieldInfo fieldInfo = type.GetRuntimeField(aEnumValue.ToString());
StringValue[] attributes = fieldInfo.GetCustomAttributes(typeof(StringValue), false) as StringValue[];
if (attributes.Length > 0)
{
return attributes[0];
}
return null;
}
Run Code Online (Sandbox Code Playgroud)
GetCustomAttributes总是返回一个空数组,所以attributes.Length总是0,所以函数返回null;
在Windows 10中有什么变化阻止它工作?
非常感谢!
我在C#中有一个自定义属性:MyAttr.我有一个方法,希望委托作为参数.
我现在将lambda表达式传递给该方法:
SomeMethod((object o) => { DoSomething(); });
Run Code Online (Sandbox Code Playgroud)
该DoSomething()方法使用relfection来获取有关调用方法的信息(在本例中为lambda表达式).但它无法找到所需的信息,因为lambda表达式没有属性:-(
我想要做的是以下之一:
// This does not work:
SomeMethod([MyAttr](object o) => { DoSomething(); });
// Thos does not work, too:
SomeMethod((object o) => [MyAttr] { DoSomething(); });
Run Code Online (Sandbox Code Playgroud)
是否有可能将属性放入lambda表达式?
c# ×6
.net ×3
reflection ×2
asp.net-mvc ×1
attributes ×1
enums ×1
f# ×1
fsunit ×1
html ×1
lambda ×1
magento ×1
php ×1
windows-10 ×1