小编Pav*_*ski的帖子

根据查询字符串路由到控制器

问题:我们正在从旧系统升级,因此解决方案受到限制。如果存在特定的查询字符串,我正在尝试路由到未经授权的控制器。如果不存在,则将用户路由到授权控制器。这是在 ASP.Net Core 2.1 上。

是否可以将控制器设置为基于查询字符串进行路由?我试过了

[/home/[action]?query={query}] -> 由于“?”导致运行时错误

[/home/[action]/{query}] - > 映射到 /home/index/1 (不是我需要的)

谢谢你的帮助!

编辑:或者,是否可以有一个单独的控制器 Action 取决于查询参数?

public IActionResult Index(){}

public IActionResult Index([FromQuery]string query){}
Run Code Online (Sandbox Code Playgroud)

路由似乎没有区分这两者。

asp.net-core

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

如何使用这种“组合”数据类型:(int, int)[]

我正在 codewars.com 上做套路,其中一个涉及一系列间隔:

(int, int)[] intervals
Run Code Online (Sandbox Code Playgroud)

我认为这等效于 KeyValuePair 数组,但是如何访问任一整数?

.net c#

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

空合并赋值运算符的行为

我只是想知道??=运算符如何在后台运行。我有两个问题。

考虑下面的例子,

string name = "John";
name ??= "George";
Run Code Online (Sandbox Code Playgroud)

1)是否等于name = name ?? "George";

2) 它是这样工作的吗,

if (name == null) {
   name = "George";
}
Run Code Online (Sandbox Code Playgroud)

或者

if (name == null) {
   name = "George";
}
else {
   name = name;
}
Run Code Online (Sandbox Code Playgroud)

c# .net-core c#-8.0

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

如何将可为空的对象引用分配给不可为空的变量?

我正在使用 VS2019 并在项目设置中启用了可为空检查语义。我正在尝试使用程序集获取可执行文件的路径,如下所示:

        var assembly = Assembly.GetEntryAssembly();
        if (assembly == null)
        {
            throw new Exception("cannot find exe assembly");
        }
        var location = new Uri(assembly.GetName().CodeBase);//doesn't compile.
Run Code Online (Sandbox Code Playgroud)

它说,“assembly”是一个 [Assembly?] 类型,而 Uri ctor 需要一个字符串,编译错误是:

error CS8602: Dereference of a possibly null reference.
Run Code Online (Sandbox Code Playgroud)

如何修复我的代码以使其编译?非常感谢。

c# .net-assembly c#-8.0 nullable-reference-types

3
推荐指数
2
解决办法
893
查看次数

linq 中带括号的逗号分隔列表项

我有一个列表,我想要用逗号分隔 [] 内的项目

输入是

List<string> inputString = new List<string>() { "1", "2", "3", "4" };
Run Code Online (Sandbox Code Playgroud)

输出:

 [1],[2],[3],[4]
Run Code Online (Sandbox Code Playgroud)

谁能告诉我如何在没有 foreach 循环的情况下实现这一目标。我想使用 linq 查询。

我已尝试以下步骤但不起作用

inputString.Aggregate("", (str1, str2) => '[' + str1+ ']' + "," + '[' + str2+ ']');
Run Code Online (Sandbox Code Playgroud)

有人能帮我解决这个问题吗?

c# linq list

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

C# 多个 switch case 相同的值 lambda 语法

可以这样转换:

int x = 1;
string xString;
switch (x)
{
    case 1:
        xString = "1";
        break;
    case 2:
        xString = "2";
        break;
    default:
        xString = "default";
        break;
}
Console.WriteLine(xString);
Run Code Online (Sandbox Code Playgroud)

进入这个:

int x = 1;
string xString = x switch
{
    1 => "1",
    2 => "2",
    _ => "default",
};
Console.WriteLine(xString);
Run Code Online (Sandbox Code Playgroud)

但是,在多个情况下将 xString 的值设置为相同值而不为每种情况创建 lambda 行的语法是什么?

int x = 1;
string xString;
switch (x)
{
    case 1:
        xString = "1";
        break;
    case 2:
    case 4:
        xString = "even numbers";
        break; …
Run Code Online (Sandbox Code Playgroud)

c# syntax lambda switch-statement

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

将 Asp.Net Core 3.1 应用程序升级到 .Net 5 后,某些 C# 9 功能不可用

我通过将相应的 *.csproj 文件修改为以下内容,将 Asp.Net Core 3.1 (MVC) 升级到 .Net 5:

<TargetFramework>net5.0</TargetFramework>
<LangVersion>9.0</LangVersion>
Run Code Online (Sandbox Code Playgroud)

现在我可以使用 C# 9目标类型功能...

string s = new('c', 3); // compiles fine
Run Code Online (Sandbox Code Playgroud)

...但我无法创建记录

public data class User
{
  // IDE1007 The name 'data' does not exist in the current context. 
}
Run Code Online (Sandbox Code Playgroud)

我在这里错过了什么吗?

c# asp.net-core .net-5 c#-9.0

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

几何图形有太多边缘(Google Earth Engine)。帮我

在此输入图像描述

我在使用 Google Earth Engine 时遇到问题。我正在处理一些矢量文件。我得到以下代码:

google-earth-engine

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

从字典值到 IEnumerable 的 Concat 列表

我有一个Dictionary<int, list<T>>并且想要得到一个IEnumerable<T>,它允许我遍历字典中所有列表的所有元素。这当然应该避免处理所有元素和其他性能成本高的操作。

我对 Linq 的处理方式不太正确:

IEnumerable<T> enumerable = dict.SelectMany(list).Foreach(list.ConcatAll()).ToEnum();
Run Code Online (Sandbox Code Playgroud)

如果Linq不是最佳方式,请提出其他选择。

.net c# linq dictionary

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

是否有同时包含 List&lt;T&gt; 和 HashSet&lt;T&gt; 的类型?

我有两种显示方法:一种是项目列表,另一种是项目的 HashSet。方法是一样的。有没有办法用参数类型编写方法,这样我就可以使用相同的方法,而不管传递给方法的参数是什么类型:List<T>HashSet<T>

方法是:

    public static void DisplayList<T>(List<T> list)
    {
        int i = 0;
        foreach (T item in list)
        {
            Console.Write(item.ToString());
            if (i < list.Count - 1)
            {
                Console.Write(", ");
            }
            i++;
        }
        Console.WriteLine();
    }

    public static void DisplayHashSet<T>(HashSet<T> set)
    {
        int i = 0;
        foreach (T item in set)
        {
            Console.Write(item.ToString());
            if (i < set.Count - 1)
            {
                Console.Write(", ");
            }
            i++;
        }
        Console.WriteLine();
    }
Run Code Online (Sandbox Code Playgroud)

.net c# list hashset

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