相关疑难解决方法(0)

为什么C#禁止通用属性类型?

这会导致编译时异常:

public sealed class ValidatesAttribute<T> : Attribute
{

}

[Validates<string>]
public static class StringValidation
{

}
Run Code Online (Sandbox Code Playgroud)

我意识到C#不支持通用属性.然而,经过大量的谷歌搜索,我似乎无法找到原因.

有谁知道为什么泛型类型无法衍生出来Attribute?任何理论?

c# generics .net-attributes

494
推荐指数
7
解决办法
7万
查看次数

将字符串解析为C#lambda Func

有没有办法将lambda的字符串表示转换为lambda Func?

Func<Product, bool> func = Parse<Product, bool>("product => product.Name.Length > 0");
Run Code Online (Sandbox Code Playgroud)

我尝试了动态LINQ但它没有按预期工作 - 例如它不期望lambda语法=>.

答案摘要:

  • 编写我自己的C#编译器 - 非常有趣
  • 启动外部编译器(如csc.exe) - 非常慢
  • 使用DLINQ - 正如我所说,我不知道它如何解析lambda表达式

为什么我需要这个:因为没有办法将lambdas传递给自定义属性,比如

[Secure(role => role.CanDoThis && role.AllowedCount > 5)]
Run Code Online (Sandbox Code Playgroud)

因此,作为一种解决方法,我想将lambda作为字符串传递:"role => role.CanDoThis && role.AllowedCount> 5".但似乎我必须像这样使用DLINQ:"CanDoThis && AllowedCount> 5" - 因为这是它理解的语法.但我的问题是关于真正的lambdas,我在询问时已经使用过DLINQ了.

c# linq

22
推荐指数
3
解决办法
2万
查看次数

标签 统计

c# ×2

.net-attributes ×1

generics ×1

linq ×1