我有一个泛型类,它保存指定类型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)
是否有可能投射通用值?或者有另一种获取字节的方法吗?
我以为我了解异步等待模式和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 …
我知道,您不应该更改 NuGet 包的包 ID。但我做到了,因为进行了一次大的重构。
现在我想知道是否有适当的方法来定义后继 NuGet 包。
Nuspec 中的旧 ID:OldLibrary1
Nuspec/csproj 文件中的新 ID:Library1
如果用户打开 Visual Studio 解决方案的 NuGet 包管理窗口并安装了旧包 (ID OldLibrary1-1.0.0),他应该会看到包的更新/升级Library1-2.0.0。
有没有可能以某种方式定义它?
顺便说一下,我使用 ProGet 作为 NuGet 服务器。
c# ×2
async-await ×1
bitconverter ×1
casting ×1
generics ×1
nuget ×1
nuspec ×1
proget ×1
task ×1
wpf ×1