小编Wai*_*Lee的帖子

如何按降序版本列表在C#中排序?

我有一个清单,里面有一些版本。

样本数据 :

"4.5","2.1","2.2.1","7.5","7.5.3","N/A","2.3.4.5"
Run Code Online (Sandbox Code Playgroud)

正如您所看到的那样,我正在尝试按降序对列表进行排序,降序3.8.5invalidnumber&NA是无效的。

代码:

decimal result;
var sortedVData = vData.OrderByDescending(v => decimal.TryParse(v.vCode, out result) ? Convert.ToDecimal(v.vCode) : decimal.MaxValue);
Run Code Online (Sandbox Code Playgroud)

输出: "NA" , "7.5.3" , '2.3.4.5' , "2.2.1" , '7.5' , '4.5' , '2.1'

正如你在我看别的(:)条件我做decimal.MaxValue,使NA前来顶部是否有无效值(用任何文本字符串),但2.2.1应该是一个例外,应该数工作(强硬2.2.1或任意数量的具有多个小数一个是从版本的角度来看无效,我希望它们有条件地有效。

预期结果 : "NA" , "7.5.3" , "7.5" , "4.5" ,"2.3.4.5" ,"2.2.1" , "2.1"

.net c# linq

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

WPF工具包:CheckComboBox和[Flags]枚举

我正在使用Xceed Extended WPF Toolkit来显示带有[Flags]属性的枚举PropertyGrid.

[Flags]             
public enum TestEnum
{
    Test1 = 1,
    Test2 = 2,
    Test3 = 4,
    Test4 = 8,
    Test5 = 16,
    Test6 = 32,
    Test7 = 64,
}
Run Code Online (Sandbox Code Playgroud)

因为我无法在编译时知道枚举定义,所以我将使用EnumBuilder动态创建枚举.

我创建了一个编辑器来显示枚举CheckComboBox:

public class CheckComboBoxEditor : TypeEditor<CheckComboBox>, ITypeEditor
{
    protected override void SetValueDependencyProperty()
    {
        ValueProperty = CheckComboBox.SelectedValueProperty;
    }

    protected override CheckComboBox CreateEditor()
    {
        return new CheckComboBox();
    }

    protected override void ResolveValueBinding(PropertyItem propertyItem)
    {
        var _binding = new Binding("Value");
        _binding.Source = propertyItem; …
Run Code Online (Sandbox Code Playgroud)

c# wpf enums wpftoolkit xceed

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

如何确定 BMP 图像是否包含标题中的 BGR 或 BGRA 像素?

我不知道如何确定 BMP 图像是否包含 BGR 或 BGRA 颜色。我编写了简单的 BMP 阅读器,但不同图像上有不同的值。

我已经找到了两个选择。

  1. 简单 BGR(255、255、255)
  2. 第四个值为 0 (255, 255, 255, 0)

有什么方法可以从位图信息标题中找出哪个选项?

c++ bmp

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

从具有整数值的jwt有效负载解码编码的JSON字符串时,Convert.FromBase64string引发无效的Base-64异常

我正在编写一个函数来手动验证并获取jwt access_token的标头和有效负载对,我正在使用https://jwt.io/上提供的示例令牌进行测试,这时 我的代码非常简单

string[] tokenSegments = Token.Split('.');
string tokenHeaders = Encoding.UTF8.GetString(Convert.FromBase64String(tokenSegments[0]));
string tokenPayload = Encoding.UTF8.GetString(Convert.FromBase64String(tokenSegments[1]));
Run Code Online (Sandbox Code Playgroud)

当它到达tokenPayloadLine im时收到以下异常

System.FormatException:输入不是有效的Base-64字符串,因为它包含>一个非基本的64个字符,两个以上的填充字符或填充字符中的一个非法字符。在System.Convert.FromBase64CharPtr(Char * inputPtr,Int32 inputLength)在System.Convert.FromBase64String(String s)

并且在此级别抛出异常

Convert.FromBase64String(tokenSegments[1])
Run Code Online (Sandbox Code Playgroud)

请注意,我可以毫无例外地获取标头值

我尝试并编辑了令牌,以更改有效负载处可用的整数值以使其成为字符串,然后我成功获取了有效负载

只是比较,抛出异常的编码字符串是

eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ
Run Code Online (Sandbox Code Playgroud)

工作正常的是

eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoiMTUxNjIzOTAyMiJ9
Run Code Online (Sandbox Code Playgroud)

如果将它们都解码,您会发现唯一的区别是导致异常的整数值

难道我做错了什么?这不是转换功能的预期用途吗?任何想法或建议也将有所帮助,请注意,我需要手动执行此操作,因为我完全了解在线提供的jwt库。

.net c#

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

对于c程序中的循环混淆

为什么循环从2运行到7?

int i;    
for(i=1;i<=6;printf("\n%d\n",i))    
i++;
Run Code Online (Sandbox Code Playgroud)

这个的输出是

2
3
4
5
6
7
Run Code Online (Sandbox Code Playgroud)

但限制i是6.

c for-loop

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

symfony 4:驱动程序发生异常:找不到驱动程序

使用以下配置 (doctrine.yaml) 在 Symfony 4 中使用 Doctrine DBAL:

dbal:
    # configure these for your database server
    driver: 'pdo_mysql'
    server_version: '5.7'
    charset: utf8mb4
    default_table_options:
        charset: utf8mb4
        collate: utf8mb4_unicode_ci

    url: '%env(resolve:DATABASE_URL)%'
    driver_class: App\DBAL\Driver\PDOMySql\Driver
Run Code Online (Sandbox Code Playgroud)

和.env:

DATABASE_URL=mysql://root:passwd@127.0.0.1:3306/dbname
Run Code Online (Sandbox Code Playgroud)

我们无法通过 DBAL 连接到数据库:

$conn = DriverManager::getConnection(Constants::connectionParams,new Configuration());
Run Code Online (Sandbox Code Playgroud)

获取驱动程序中发生异常:找不到驱动程序异常。我在 S4 的这个版本中没有找到关于该错误的文档。

doctrine symfony dbal symfony4

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

在Elixir中有效地压缩不等长的列表

Elixir zip/2函数压缩两个列表,在到达较短列表的末尾时停止。我一直试图做相反的事情-本质上是从较短的列表中复制项目,直到到达最长的列表的末尾。

这是我所拥有的:

def zipReduce(m, n) when is_list(m) and is_list(n) do
  { long, short } = if length(m) > length(n)
    do { m, n }
    else { n, m }
  end

  Enum.reduce(0..Integer.mod(length(long), length(short)), [], fn i, acc ->
    long
    |> Enum.slice(length(short) * i, length(short))
    |> Enum.zip(short)
    |> Enum.into(acc)
  end)
end
Run Code Online (Sandbox Code Playgroud)

它确实有效,但是我并不喜欢所有这些电话,length/1因为每个电话都需要完整的列表遍历,并且可能会减少很多。我可以将长度与短列表和长列表一起缓存在元组中,但这感觉非常必要(尽管如果需要,我会这样做以提高性能)。

有没有想到的方法?可能是完全不同的方法?

reduce zip enumeration list elixir

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

从 appSettings.json 配置 Serilog 时出现问题

我有一个与 appSettings.json 的 Serilog 配置有关的问题。我的项目是一个控制台应用程序,基于.Net Core 3.0。我尝试设置 Serilog 以便将日志信息写入控制台和日志文件。

当我在代码本身中配置所有内容时 - 一切都按预期工作。

但是,当我尝试从 appsettings.json 文件导入 Serilog 配置设置时,我遇到了问题,我的 ConsoleSink 工作正常,但我的 FileSink 不行。

这是我在 appsettings.json 中写入的内容:

{
  "Serilog": {
    "Using": [ "Serilog.Sinks.File", "Serilog.Sinks.Console" ],
    "MinimumLevel": "Debug",
    "WriteTo": [
      {
        "Name": "File",
        "Args": { "pathFormat": "Xlog.txt" }
      },
      { "Name": "Console" }
    ]
  }
}
Run Code Online (Sandbox Code Playgroud)

这是相关的代码:

  IConfiguration configSerilog = new ConfigurationBuilder()
                .AddJsonFile("appsettings.json", true, true)
                .Build();


            log = new LoggerConfiguration()
                 .ReadFrom.Configuration(configSerilog)
                 .CreateLogger();


            log.Information("Initializing Serilog....");
Run Code Online (Sandbox Code Playgroud)

我的“测试日志消息”显示在我的控制台窗口中,但我没有收到日志文件。

正如我所提到的,当我在代码本身中配置 Serilog 时,它就可以工作,而不是通过应用程序设置。因此,我确实拥有创建文件的适当访问权限。

有什么想法或提示吗?

c# console-application serilog .net-core

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

有什么作用?在 Angular 函数参数中是什么意思?

在阅读 Angular 4 教程时,我发现了一种在函数中获取/设置参数的新方法。

onValueChange(data?: any)
Run Code Online (Sandbox Code Playgroud)

有什么作用?

typescript angular

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

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