小编rit*_*gig的帖子

C#泛型:将泛型类型转换为值类型

我有一个泛型类,它保存指定类型T的值.值可以是int,uint,double或float.现在我想获取值的字节以将其编码为特定协议.因此,我想使用BitConverter.GetBytes()方法,但遗憾的是Bitconverter不支持泛型类型或未定义的对象.这就是为什么我想要转换值并调用GetBytes()的特定重载.我的问题:如何将通用值转换为int,double或float?这不起作用:

public class GenericClass<T>
    where T : struct
{
    T _value;

    public void SetValue(T value)
    {
        this._value = value;
    }

    public byte[] GetBytes()
    {
        //int x = (int)this._value;
        if(typeof(T) == typeof(int))
        {
            return BitConverter.GetBytes((int)this._value);
        }
        else if (typeof(T) == typeof(double))
        {
            return BitConverter.GetBytes((double)this._value);
        }
        else if (typeof(T) == typeof(float))
        {
            return BitConverter.GetBytes((float)this._value);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

是否有可能投射通用值?或者有另一种获取字节的方法吗?

c# generics casting bitconverter

13
推荐指数
4
解决办法
2万
查看次数

为什么不等待 Task.Run() 同步回 UI 线程/源上下文?

我以为我了解异步等待模式Task.Run操作。
但我想知道为什么在下面的代码示例中,await从完成的任务返回后不同步回 UI 线程。

public async Task InitializeAsync()
{
    Console.WriteLine($"Thread: {Thread.CurrentThread.ManagedThreadId}"); // "Thread: 1"
    double value = await Task.Run(() =>
    {
        Console.WriteLine($"Thread: {Thread.CurrentThread.ManagedThreadId}"); // Thread: 6

        // Do some CPU expensive stuff
        double x = 42;
        for (int i = 0; i < 100000000; i++)
        {
            x += i - Math.PI;
        }
        return x;
    }).ConfigureAwait(true);
    Console.WriteLine($"Result: {value}");
    Console.WriteLine($"Thread: {Thread.CurrentThread.ManagedThreadId}"); // Thread: 6  - WHY??
}
Run Code Online (Sandbox Code Playgroud)

此代码在带有附加 Visual Studio 2019 调试器的 Windows 10 系统上的 .NET …

c# wpf multithreading task async-await

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

重命名 NuGet 包 ID 后如何定义后继包 ID

我知道,您不应该更改 NuGet 包的包 ID。但我做到了,因为进行了一次大的重构。

现在我想知道是否有适当的方法来定义后继 NuGet 包。

Nuspec 中的旧 ID:OldLibrary1
Nuspec/csproj 文件中的新 ID:Library1

如果用户打开 Visual Studio 解决方案的 NuGet 包管理窗口并安装了旧包 (ID OldLibrary1-1.0.0),他应该会看到包的更新/升级Library1-2.0.0

有没有可能以某种方式定义它?

顺便说一下,我使用 ProGet 作为 NuGet 服务器。

nuget nuget-package nuspec proget

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