小编ser*_*0ne的帖子

C#6.0空传播运算符和属性赋值

为了彻底解释,这个问题已经彻底改革.

我注意到C#6.0中空传播运算符的限制似乎很差,因为你无法针对已经传播的对象调用属性设置器(尽管你可以针对已经传播的对象调用属性getter) .正如您将从生成的IL (我已反映到C#中)看到的那样,没有任何东西可以限制使用空传播调用属性设置器的能力.

首先,我创建了一个简单的类,包括Java样式的Get/Set方法和具有公共getter/setter访问权限的属性.

public class Person
{
    public Person(string name, DateTime birthday)
    {
        Name = name;
    }

    public string Name { get; set; }

    public void SetName(string name)
    {
        Name = name;
    }

    public string GetName()
    {
        return Name;
    }
}
Run Code Online (Sandbox Code Playgroud)

我已经在下面的测试类中测试了空传播的能力.

public class Program
{
    public static void Main(string[] args)
    {
        Person person = new Person("Joe Bloggs", DateTime.Parse("01/01/1991"));

        // This line doesn't work - see documented error below
        person?.Name = "John Smith"; …
Run Code Online (Sandbox Code Playgroud)

c# c#-6.0 null-propagation-operator

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

嵌套的Parallel.ForEach循环

我有一些代码,我目前正在优化多核架构中的并发性.在我的一个类中,我发现了一个嵌套foreach循环.基本上,外部循环遍历一个NetworkInterface对象数组.内循环通过网络接口IP地址进行迭代.

它让我思考,嵌套Parallel.ForEach循环一定是个好主意吗?阅读本文后(同一列表上的嵌套Parallel.ForEach循环?)我仍然不确定在效率和并行设计方面适用的是什么.此示例将Parallel.Foreach处理应用于列表的语句,其中两个循环都在该列表上执行操作.

在我的例子中,循环正在做不同的事情,所以,我应该:

  1. 使用嵌套的Parallel.ForEach循环?
  2. 父循环上的User Parallel.ForEach并保持内循环原样?

.net c# concurrency performance task-parallel-library

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

C# - 生成数组中所有对的时间复杂度

给定一组数字,生成所有唯一对.

例如,给定[ 1, 2, 3, 4, 5 ]唯一的数字对将是:

(1, 2), (1, 3), (1, 4), (1, 5)

(2, 3), (2, 4), (2, 5)

(3, 4), (3, 5)

(4, 5)
Run Code Online (Sandbox Code Playgroud)

我的解决方案如下:

int[] numbers = new int[] { 1, 2, 3, 4, 5 };
HashSet<Pair> pairs = new HashSet<Pair>();

for(int i = 0; i < numbers.Length; i++)
{
    for(int j = i + 1, j < numbers.Length; j++)
    {
        pairs.Add(new Pair(numbers[i], numbers[j]));
    }
}
Run Code Online (Sandbox Code Playgroud)

我认为时间复杂度看起来像O(n 2 - 1)减去1,因为迭代j总是比1短 …

c# algorithm time-complexity

21
推荐指数
3
解决办法
3448
查看次数

在.NET中使用动态类型的性能成本

在.NET 中使用dynamicvs 的性能成本是object多少?比方说,我有一个接受任何类型参数的方法.例如

public void Foo(object obj)
{
}
Run Code Online (Sandbox Code Playgroud)

要么

public void Foo(dynamic obj)
{
}
Run Code Online (Sandbox Code Playgroud)

ILSpy告诉我,在使用动态代码时,编译器必须插入代码块来处理动态.因此,我想知道是否建议使用动态代替对象,以及这种用法以性能为代价达到什么级别?

.net c# compiler-construction performance dynamic

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

JavaScript中的Document和document有什么区别?

我目前正在为JavaScript构建一个API,主要使用Visual Studio 2010和JetBrains WebStorm(如果您正在寻找一个防弹JavaScript IDE,那就太棒了).

虽然通过Visual Studio中的智能感知列表中寻找(尝试使用JavaScript API来熟悉自己),我注意到,这两个Documentdocument存在.

  1. Document和之间有什么区别document
  2. 什么是document(如果有的话)的实例?
  3. 如何使用Document(因为它不是一个函数,因此,不可构造)?
  4. 最重要的是,"猴子修补" Document使其可以构建的危害是什么?

这些问题背后的理由是,我要创建适合我的API一些对象(例如; Document,HTMLElement等),但这些似乎在某些方面已经存在了,我不相信,我应该重写他们的母语实现.

javascript dom

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

LINQ和动态继承的C#编译错误

考虑以下代码(为了这个测试,它没有做任何特殊用途 - 它只是为了演示发生的错误)

Dictionary<string, dynamic> d = new Dictionary<string, dynamic>()
{
    { "a", 123 },
    { "b", Guid.NewGuid() },
    { "c", "Hello World" }
};
d.Where(o => o.Key.Contains("b")).ForEach(i => Console.WriteLine(i.Value));
//retuns the Guid value, as expected.
Run Code Online (Sandbox Code Playgroud)

我想Dictionary<string, dynamic>使用继承包装:

public class CustomDictionary : Dictionary<string, dynamic>
{
}
Run Code Online (Sandbox Code Playgroud)

以下是使用此派生类的上述检查:

CustomDictionary d = new CustomDictionary()
{
    { "a", 123 },
    { "b", Guid.NewGuid() },
    { "c", "Hello World" }
};
d.Where(o => o.Key.Contains("b")).ForEach(i => Console.WriteLine(i.Value));
Run Code Online (Sandbox Code Playgroud)

有时候是这样的...

在此输入图像描述

在此输入图像描述

关于导致问题的原因或如何解决问题的任何想法?

c# linq inheritance compiler-errors

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

为什么在 C# 中记录类默认是不可变的,但记录结构却不是?

我被教导结构应该几乎总是不可变的,因此记录类与记录结构的这种不寻常行为让我措手不及。

使用记录类...

record class Person(string FirstName, string LastName);
Person p = new("John", "Smith");
p.FirstName = "Jack" // Not allowed!
Run Code Online (Sandbox Code Playgroud)

使用记录结构...

record struct Person(string FirstName, string LastName);
Person p = new("John", "Smith");
p.FirstName = "Jack" // Fine!
Run Code Online (Sandbox Code Playgroud)

使用只读记录结构...

readonly record struct Person(string FirstName, string LastName);
Person p = new("John", "Smith");
p.FirstName = "Jack" // Now allowed!
Run Code Online (Sandbox Code Playgroud)

为什么readonly记录结构默认是可变的,为什么相同的行为不适用于记录类?

编辑:我想我在这里问的是,为什么语法......很奇怪?

例如,看起来更合乎逻辑:

  • record class-具有值语义的可变引用类型。
  • readonly record class-具有值语义的不可变引用类型。
  • record struct-具有值语义的可变值类型。
  • readonly record struct …

c# record immutability

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

扩展JavaScript的内置类型 - 这是邪恶的吗?

我已经阅读了一些文章,建议在JavaScript中扩展内置对象是一个坏主意.比方说我添加一个first函数Array...

Array.prototype.first = function(fn) {
    return this.filter(fn)[0];
};
Run Code Online (Sandbox Code Playgroud)

太好了,所以现在我可以根据谓词得到第一个元素.但是当ECMAScript-20xx决定首先添加到规范并以不同方式实现时会发生什么? - 好吧,突然之间,我的代码假定了一个非标准的实现,开发人员失去信心等等.

那么我决定创建自己的类型......

var Enumerable = (function () {
    function Enumerable(array) {
        this.array = array;
    }
    Enumerable.prototype.first = function (fn) {
        return this.array.filter(fn)[0];
    };
    return Enumerable;
}());
Run Code Online (Sandbox Code Playgroud)

所以现在,我可以将一个数组传递给一个新的Enumerable,然后在Enumerable实例上调用它.大!我尊重ECMAScript-20xx规范,我仍然可以做我想做的事情.

然后发布了ES20XX + 1规范,它引入了Enumerable一种甚至没有第一种方法的类型.现在发生了什么?

本文的关键归结为此; 扩展内置类型有多糟糕,以及我们如何在将来避免实现冲突?

注意:命名空间的使用可能是解决这个问题的一种方法,但话说回来,它不是!

var Collection = {
    Enumerable: function () { ... }
};
Run Code Online (Sandbox Code Playgroud)

当ECMAScript规范引入时会发生什么Collection

javascript

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

Spring - server.connection-timeout无效

在我的application.properties文件中,我有......

server.port=8086
server.connection-timeout=15000
Run Code Online (Sandbox Code Playgroud)

我知道文件正在正确加载,因为服务器在端口8086上运行.

在应用程序中,我有一个 RestController

@RestController
class TestController {
    @GetMapping()
    fun getValues(): ResponseEntity<*> {
        return someLongRunningProcessPossiblyHanging()
    }
}
Run Code Online (Sandbox Code Playgroud)

当我调用端点时,请求永远不会超时,它只是无限期挂起.

我错过了什么吗?

注意:我也被告知Tomcat在几分钟内使用此字段,而不是毫秒(相当不寻常的选择IMO).我已经尝试将其设置为server.connection-timeout=1表示1分钟,但这也不起作用.

注意:我不希望另一个 HTTP请求导致先前的请求超时,我希望每个HTTP请求自己超时,如果过多的时间过去服务请求.

java spring kotlin spring-boot

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

扩展方法与助手类

可能重复:
扩展方法与静态实用程序类

我正在构建一个通用函数的API,它根据.NET中的对象执行操作.例如; 我创建了一个函数来检查字符串以查看它是否是电子邮件地址.

我可能有:

static bool IsEmailAddress(string text)
{
    return IsMail(text);
}
Run Code Online (Sandbox Code Playgroud)

或者我可以创建一个像这样使用的扩展方法:

string text = "HelloWorld@Email.com";
if (text.IsEmailAddress())
{
}
Run Code Online (Sandbox Code Playgroud)

哪个更合适,或者你认为既然这是一个通用的库,我可以在技术上实现它两种方式,并允许开发人员决定哪个最适合他们?

.net c# extension-methods helper

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