这会导致编译时异常:
public sealed class ValidatesAttribute<T> : Attribute
{
}
[Validates<string>]
public static class StringValidation
{
}
Run Code Online (Sandbox Code Playgroud)
我意识到C#不支持通用属性.然而,经过大量的谷歌搜索,我似乎无法找到原因.
有谁知道为什么泛型类型无法衍生出来Attribute?任何理论?
给出两组值:
var subset = new[] { 2, 4, 6, 8 };
var superset = new[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
Run Code Online (Sandbox Code Playgroud)
如何确定是否superset包含所有元素subset?
我想出了这个:
superset.Intersect(subset).Count() == subset.Count()
Run Code Online (Sandbox Code Playgroud)
这是最合乎逻辑且最有效的方法吗?
我在Silverlight中有一个组合框.它有一个由我的一个LINQ-to-SQL对象(即Name,Address,Age等)的属性构建的值集合.我想根据组合框中选择的值过滤我的结果.
示例:假设我希望每个人姓氏为"Smith".我从下拉列表中选择"姓氏",然后在文本框控件中输入smith.通常我会写一个类似于......的LINQ查询
var query = from p in collection
其中p.LastName == textbox.Text
select p;
是否可以动态决定属性,也许使用Reflection?就像是
var query = from p in collection
where p.(DropDownValue)== textbox.Text
select p;
让我们说我们有
public interface ITimestampProvider
{
DateTime GetTimestamp();
}
Run Code Online (Sandbox Code Playgroud)
和一个消耗它的类
public class Timestamped
{
private ITimestampProvider _timestampProvider
public Timestamped(ITimestampProvider timestampProvider)
{
// arg null check
_timestampProvider = timestampProvider;
}
public DateTime Timestamp { get; private set; }
public void Stamp()
{
this.Timestamp = _timestampProvider.GetTimestamp();
}
}
Run Code Online (Sandbox Code Playgroud)
和默认实现:
public sealed class SystemTimestampProvider : ITimestampProvider
{
public DateTime GetTimestamp()
{
return DateTime.Now;
}
}
Run Code Online (Sandbox Code Playgroud)
引入这个构造函数是有帮助的还是有害的?
public Timestamped() : this(new SystemTimestampProvider())
{}
Run Code Online (Sandbox Code Playgroud)
这是一个普遍的问题,即时间戳不是有趣的部分.