这个问题已经解释了我尝试做什么,这是一个例子:
[Display(Name = Localization.City)]
public string City { get; set; }
错误是,但(对我来说)没有意义:属性参数必须是属性参数类型的常量表达式,typeof表达式或数组创建表达式
答案 0 :(得分:6)
为了将DisplayAttribute与资源一起使用,您需要使用
[Display(ResourceType=typeof(Localization), Name="City")]
public string City {get;set;}
不要忘记打开资源文件并将访问修饰符设置为public而不是internal。
答案 1 :(得分:1)
必须在编译时修复属性参数。 请参阅Jon Skeet在SO上的答案here:
表达式E是一个attribute-argument-expression,如果全部的话 以下陈述是> true:•E的类型是属性 参数类型(第17.1.3节)。 •在编译时,E的值可以是 解析为以下之一:•常量值。 •System.Type 宾语。 •属性 - 参数表达式的一维数组。
你能说明你如何宣布'Localization.City'吗?
答案 2 :(得分:1)
离开:C# attribute text from resource file?
public class CustomAttribute : Attribute
{
public CustomAttribute(Type resourceType, string resourceName)
{
Message = ResourceHelper.GetResourceLookup(resourceType, resourceName);
}
public string Message { get; set; }
}
public class ResourceHelper
{
public static string GetResourceLookup(Type resourceType, string resourceName)
{
if ((resourceType != null) && (resourceName != null))
{
PropertyInfo property = resourceType.GetProperty(resourceName, BindingFlags.Public | BindingFlags.Static);
if (property == null)
{
throw new InvalidOperationException(string.Format("Resource Type Does Not Have Property"));
}
if (property.PropertyType != typeof(string))
{
throw new InvalidOperationException(string.Format("Resource Property is Not String Type"));
}
return (string)property.GetValue(null, null);
}
return null;
}
}
答案 3 :(得分:0)
错误信息已清除。
Localization.City
不是常数。我假设它只是一个static
'只读'字段/属性。