小编jef*_*237的帖子

C#7 带有元组的输出变量

当输出变量为 a 时是否可以使用C#7 功能out variablesTuple

我的具体场景是这样的:

private readonly Dictionary<int, (bool, DateTime)> _dictionary;

public void SomeMethod(int number)
{
    if (this._dictionary.TryGetValue(number, out (bool isTrue, DateTime timestamp)) // what is the correct syntax?
        // use isTrue and timestamp here
}
Run Code Online (Sandbox Code Playgroud)

如果这是可能的,我似乎找不到正确的语法。

澄清:我希望能够直接解构为isTruetimestamp不是必须创建另一个变量。

c# c#-7.0

11
推荐指数
1
解决办法
5053
查看次数

具有径向梯度的WPF径向进度条

这个问题和答案的帮助下,我设法创建了一个径向进度条.这实现了弧形绘制概念,其中弧线绑定到起始角度和结束角度.

我现在的问题是我希望进度条从弧的中心有径向渐变.这使得进度条从弧的内部到弧的外部具有"线性梯度".我试图在弧的笔划上应用径向渐变(ProgressBar的Foreground属性),但是这会在弧形笔划的中心应用径向渐变,而不是弧形对象的中心(如下所示).

40%弧度

当弧度为100%(或任何高于75%)时,行程的中心位于弧的中心,从而产生所需的结果.

100%弧度 80%的弧度

如何始终将径向渐变的中心调整到圆弧的中心,以便在所有填充百分比下应用所需的渐变?或者是否有更好的解决方案/方法解决这个问题?

c# wpf xaml visual-studio

6
推荐指数
1
解决办法
1452
查看次数

使用 C#8 默认接口实现/特征的事件继承

目前,关于新 C#8 默认接口实现(特征)的事件限制的文档很少。我对规范提案特别困惑。该示例不仅给出了无效的 C#(“覆盖”事件缺少标识符),而且在 C#8(VS2019、.NET Core 3.0)中实现其中任何一个都会返回大量编译器异常。此外,C#8 的发行说明没有提及任何接口特征的事件。当我继续尝试寻找答案时,我也无法从开放问题列表中收集到任何有用的信息。

那么问题来了:这个功能是否实现并可用?如果是这样,正确的语法是什么?

c# .net-core c#-8.0 default-interface-member

6
推荐指数
1
解决办法
1126
查看次数

将JSON反序列化为通用接口属性

我有一个泛型类,它包含一个公共属性,它是与父类相同类型的通用接口.示例代码如下.

public interface IExample<T>
{
    T Value { get; set; }
    string Name { get; set; }
}

public class Example<T> : IExample<T>
{
    public string Name { get; set; }
    public T Value { get; set; }
}

public class Parent<T>
{
    public string ParentName { get; set; }
    public IExample<T> ExampleItem { get; set; }
}

public class MainClass
{
    public Parent<int> IntParent { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我正在使用JSON.net来序列化MainClass可以包含许多Parent<T>对象的对象. Parent<T>可以是没有类型约束的任何泛型.但是,我似乎无法以通用方式反序化生成的JSON.

我试图JsonConverter为JSON.net反序列化器创建一个,但我找不到一种通用的方法. …

.net c# generics serialization json

5
推荐指数
1
解决办法
1610
查看次数

.NET标准项目中的原始IL

借助IL Support VS扩展,可以在.csproj针对.NET Framework 的文件中写入原始IL 。此扩展要求使用旧.csproj格式来正确允许IL“编译”。是否可以使用新.csproj格式在.NET Standard项目中编写原始IL ?还是使用旧.csproj格式,但仍以.NET Standard为目标?

编辑:IL支持v2.4(VS扩展)已发布,支持新项目格式,包括.NET Standard和.NET Core。

c# cil csproj visual-studio .net-standard

5
推荐指数
0
解决办法
157
查看次数

为什么 Span&lt;T&gt; 扩展方法不使用 'in' 参数修饰符实现?

随着 C#7.2 的发布,in参数修饰符Span<T>struct出现了。Spans 现在已经充斥着 .NET Core 周围的 API。还发布了 .NET 标准 API ( System.Memory ),可以使用Span<T>ReadOnlySpan<T>等。

API的一部分System.Memory是这些切片类型的扩展方法,如此处所示

问题是,为什么不使用in跨度的参数修饰符来实现这些扩展方法?由于Span<T>ReadOnlySpan<T>ref readonly struct类型,因此这些方法似乎会导致运行时创建传递给这些方法的跨度的防御性副本。据我所知,这个副本相对便宜,但似乎会看到很小的性能提升。

这些扩展方法的一些 .NET Core 实现位于此处

为了澄清起见,我期待这样的方法签名:

public static int IndexOf<T>(this in System.Span<T> span, T value) where T : System.IEquatable<T>
public static System.ReadOnlySpan<char> Trim(this in System.ReadOnlySpan<char> span)
public static bool IsWhiteSpace(this in System.ReadOnlySpan<char> span)
Run Code Online (Sandbox Code Playgroud)

.net c# .net-core

3
推荐指数
1
解决办法
684
查看次数

当通过反射检索到值时,枚举失败==

我正在尝试为MVC 6实现自定义jQuery Unobtrusive Validation属性.下面是IsValid()一个属性的实现,它查看类中的相邻属性并将其与编译时常量进行比较.

protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
    ValidationResult result = ValidationResult.Success;

    // Simplest case, there is something in this field
    if (!string.IsNullOrEmpty(value?.ToString()))
        return result;

    // Check relative field
    try
    {
        // Grab the property referenced via reflection
        var relativeProperty = validationContext.ObjectType.GetProperty(this._relativePropertyName);

        // Compare the runtime value of that property to the Attribute initialized value
        if (relativeProperty.GetValue(validationContext.ObjectInstance) == this._relativeValue)
        {
            // Fail if those 2 values are equal
            result = new ValidationResult(this.ErrorMessageString); 
        }

    } …
Run Code Online (Sandbox Code Playgroud)

c# asp.net asp.net-mvc unobtrusive-validation

1
推荐指数
1
解决办法
198
查看次数