Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 编译时类型分配_C#_Attributes_Types - Fatal编程技术网

C# 编译时类型分配

C# 编译时类型分配,c#,attributes,types,C#,Attributes,Types,我正在为我的WPF/C应用程序开发一个自定义验证框架 我要做的是从声明viewmodel的资源文件中检索字符串,但在实际的验证代码中,它本身就是字符串。此特定字符串与编辑UI表单上的label使用的资源相同 我的代码可以很好地使用以下语法- 但我要找的是一种语法上更清晰的东西。我试着用 对更简单的语法有什么建议吗?旧的C++定义语句将工作得很好。 仅供参考:进行这么多工作的原因与我们如何进行本地化和UI构建有关 编辑以回答几个关于我们为什么要这样做的问题? 我们将使用资源文件中的相同字符串- 在

我正在为我的WPF/C应用程序开发一个自定义验证框架

我要做的是从声明viewmodel的资源文件中检索字符串,但在实际的验证代码中,它本身就是字符串。此特定字符串与编辑UI表单上的label使用的资源相同

我的代码可以很好地使用以下语法-

但我要找的是一种语法上更清晰的东西。我试着用

对更简单的语法有什么建议吗?旧的C++定义语句将工作得很好。 仅供参考:进行这么多工作的原因与我们如何进行本地化和UI构建有关

编辑以回答几个关于我们为什么要这样做的问题? 我们将使用资源文件中的相同字符串-

在编辑屏幕上,这是标识字段的标签。 在datamodel中,如果存在验证错误,我们将使用它在日志文件中正确标记问题。 在Viewmodel中,我们在验证错误消息中重用此标签,以强调用户的问题所在。 这是实时检查系统的一部分,一些故障模式直接与这些数据字段相关。因此,我们可以轻松获得正确本地化的标签,以应用于运行时故障消息
一般的概念是,这简化了向用户呈现一致的消息,同时只创建一次内容。关于验证属性和这个问题,我们需要能够获取资源文件类型以加载正确的消息

创建一个新的属性类,该类继承自RequiredAttribute并设置默认值

public class LocalizedRequiredAttribute : RequiredAttribute {
    public LocalizedRequiredAttribute() { /* TypeDef = typeof(Resources);*/ }
}

public class MyModel {
    [LocalizedRequired]
    public string RequiredStringWithDesc { get; set; }
}

我有点困惑为什么你需要这么做我的意思是,我不明白为什么内置的本地化系统是不够的。你不能解释一下你想做什么吗?我认为你做得有点过分了…为什么你需要在编译时知道类型。。。在运行时这还不够吗?@Pauli-因为属性只能在编译时配置。关于这一点,这里有几次讨论。而且,在运行时做任何事情都比我们现在想做的要大得多。非常简单的想法,就像这样。我会在早上试一试。
    const Type LocalRes =  typeof(Resources);
    [Required(TypeRes = LocalRes)]
    public string RequiredStringWithDesc { get; set; }
public class LocalizedRequiredAttribute : RequiredAttribute {
    public LocalizedRequiredAttribute() { /* TypeDef = typeof(Resources);*/ }
}

public class MyModel {
    [LocalizedRequired]
    public string RequiredStringWithDesc { get; set; }
}