我正在尝试过滤视图以仅显示当前用户的节点.按用户过滤:当前缺少,哪里可以找到/启用?
我一定很遗憾.
我正在制作着名的C#库C5 的间隔集合扩展.该IInterval接口定义的间隔具有可比较的端点(不相干构件除去):
public interface IInterval<T> where T : IComparable<T>
{
T Low { get; }
T High { get; }
}
Run Code Online (Sandbox Code Playgroud)
这通常很有效,因为区间端点可以是任何可比较的整数,日期甚至字符串.
然而,有时能够计算间隔的持续时间是有利的.间隔[3:5)的持续时间为2,间隔[1PM, 9PM)的持续时间为8小时.这对于可比对象是不可能的,因为它只给出了元素的顺序,而不是它们的距离,例如,很难给出两个字符串之间的距离.端点类型基本上必须是间隔缩放值.
是否有类似的界面IComparable<T>,允许我一般比较端点,但也做一些事情,比如减去两个端点以获得持续时间,并为低端点添加持续时间以获得可用于继承接口的高端点,IDurationInterval<T> : IInterval<T>例如?
或者更简洁:是否有间隔缩放值的接口?
在C#6.0中,新语法允许我们使用初始化程序编写只读自动属性:
public bool AllowsDuplicates { get; } = true;
Run Code Online (Sandbox Code Playgroud)
同样,我们可以使用表达式body getter来编写它:
public bool AllowsDuplicates => true;
Run Code Online (Sandbox Code Playgroud)
对于简单类型,这两个应该具有相同的效果:返回true的只读自动属性.
但是他们中的一个比另一个更受欢迎吗?我怀疑前者使用了支持字段:
private readonly bool _backingField = true;
public bool AllowsDuplicates {
get {
return _backingField;
}
}
Run Code Online (Sandbox Code Playgroud)
而后者变成了类似的东西:
public bool AllowsDuplicates {
get {
return true;
}
}
Run Code Online (Sandbox Code Playgroud)
这是正确的,还是编译器比这更聪明?
我有一个接口,其方法使用以下Pure属性进行注释System.Diagnostics.Contracts:
public interface IFoo<T> {
[Pure]
T First { get; }
[Pure]
T Last { get; }
[Pure]
T Choose();
void Add(T item);
T Remove();
}
Run Code Online (Sandbox Code Playgroud)
我希望遍历接口的成员并检查成员是否是纯粹的.目前我无法从会员信息中获取任何属性:
var type = typeof(IFoo<>);
var memberInfos = type.GetMembers();
var memberInfo = memberInfos.First(); // <-- Just select one of them
var attributes = memberInfo.GetCustomAttributesData(); // <-- Empty
Run Code Online (Sandbox Code Playgroud)
我错过了什么?
请注意,我没有类或实例.只有界面.
我创建了一个由间隔组成的数据结构.数据结构自然应该有一个枚举所有间隔的枚举器,但我想暴露两个不同的枚举器,它们按不同的顺序枚举间隔.
其中一个枚举器非常快地枚举间隔,但是有些任意顺序.另一个按字典顺序列举它们,但有点慢(取决于间隔).根据您尝试实现的目标,一个普查员可能更喜欢另一个.
有没有办法允许用户决定应该在foreach循环中使用哪个枚举器?如果没有,我可以很容易地拥有一个用于在枚举器之间切换的属性,或者构造函数可以采用一个额外的参数.但我有点害怕它会导致更多的混乱而不是方便.
我是否应该为另一个枚举器创建一个返回IEnumerator的单独方法?这个奇怪的问题是否有最佳实践?
我有一个在输入和输出中都使用Noda Time类型的 API 。使用默认的 Noda Time 序列化格式(基本上是 ISO-8601 格式)将类型序列化为 JSON 中的字符串。
我有一个看起来像这样的对象:
public class NodaTimeDataStructure
{
public System.DateTime DateTime { get; set; }
public DateInterval DateInterval { get; set; }
public DateTimeZone DateTimeZone { get; set; }
public Duration Duration { get; set; }
public Instant Instant { get; set; }
public Interval Interval { get; set; }
public IsoDayOfWeek IsoDayOfWeek { get; set; }
public LocalDate LocalDate { get; set; }
public LocalDateTime LocalDateTime { get; set; …Run Code Online (Sandbox Code Playgroud) 有没有办法在运行时读取 host.json 文件中的主机设置?假设您有一个如下所示的主机文件:
{
"version": "2.0",
"extensions": {
"serviceBus": {
"messageHandlerOptions": {
"maxConcurrentCalls": 16
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
那么如何maxConcurrentCalls从 C# 代码中读取设置呢?
如果也包含默认值将是优选的。您应该获得与启动时控制台中打印的相同的值:
[28-01-2020 09:16:06] LoggerFilterOptions
[28-01-2020 09:16:06] {
[28-01-2020 09:16:06] "MinLevel": "None",
[28-01-2020 09:16:06] "Rules": [
[28-01-2020 09:16:06] {
[28-01-2020 09:16:06] "ProviderName": null,
[28-01-2020 09:16:06] "CategoryName": null,
[28-01-2020 09:16:06] "LogLevel": null,
[28-01-2020 09:16:06] "Filter": "<AddFilter>b__0"
[28-01-2020 09:16:06] },
[28-01-2020 09:16:06] {
[28-01-2020 09:16:06] "ProviderName": "Microsoft.Azure.WebJobs.Script.WebHost.Diagnostics.SystemLoggerProvider",
[28-01-2020 09:16:06] "CategoryName": null,
[28-01-2020 09:16:06] "LogLevel": "None",
[28-01-2020 09:16:06] "Filter": null
[28-01-2020 …Run Code Online (Sandbox Code Playgroud) 假设你有一个像这样的 host.json 文件:
{
"version": "2.0",
"extensions": {
"serviceBus": {
"messageHandlerOptions": {
"maxConcurrentCalls": 16,
"maxAutoRenewDuration": "00:05:00"
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是您希望在本地覆盖local.settings.jsonAzure 上给定环境的设置中或设置中的设置。有可能吗,你是如何做到的?
我正在使用MVC3在C#中创建一个网站.该网站是使用Web服务的客户端.Web服务使用每个用户的唯一会话ID,它是每个服务调用中的最后一个参数.您在登录时获得会话ID.
我能够获取会话ID并将其保存在用户控制器的属性中:
private string Sid
{
get
{
var sid = Session["Sid"];
return sid == null ? "" : sid.ToString();
}
set
{
Session["Sid"] = value;
}
}
Run Code Online (Sandbox Code Playgroud)
在我的其他控制器中,我能够获得具有类似属性的会话ID(只是没有setter),但是当它要求用户控制器做某事时,它访问自己的属性来获取id,会话为null.
似乎会话不会在控制器之间传输,但我不知道如何做到这一点.我想从一个中心位置访问会话,而不是在每个控制器中都有属性,但我无法弄清楚如何做到这一点.
经过三天的搜索,谷歌一直无法给我答案.你有什么想法?
是否有任何LINQ支持检查是否IEnumerable<T>已排序?我有一个我想要验证的枚举按非降序排序,但我似乎无法在C#中找到它的本机支持.
我使用IComparables<T>以下方法编写了自己的扩展方法:
public static bool IsSorted<T>(this IEnumerable<T> collection) where T : IComparable<T>
{
Contract.Requires(collection != null);
using (var enumerator = collection.GetEnumerator())
{
if (enumerator.MoveNext())
{
var previous = enumerator.Current;
while (enumerator.MoveNext())
{
var current = enumerator.Current;
if (previous.CompareTo(current) > 0)
return false;
previous = current;
}
}
}
return true;
}
Run Code Online (Sandbox Code Playgroud)
一个使用IComparer<T>对象:
public static bool IsSorted<T>(this IEnumerable<T> collection, IComparer<T> comparer)
{
Contract.Requires(collection != null);
using (var enumerator = collection.GetEnumerator())
{
if (enumerator.MoveNext())
{
var …Run Code Online (Sandbox Code Playgroud) c# ×8
azure ×2
icomparable ×2
intervals ×2
settings ×2
c#-6.0 ×1
c5 ×1
drupal-7 ×1
drupal-views ×1
foreach ×1
generics ×1
ienumerator ×1
interface ×1
linq ×1
nodatime ×1
nswag ×1
reflection ×1
session ×1
sorted ×1
sortedlist ×1
swagger ×1