相关疑难解决方法(0)

重写System.Object.GetHashCode的最佳算法是什么?

在.NET GetHashCode方法中,很多地方都使用.NET 方法.特别是在快速查找集合中的项目或确定相等性时.是否有关于如何GetHashCode为我的自定义类实现覆盖的标准算法/最佳实践,因此我不会降低性能?

.net algorithm hashcode gethashcode

1389
推荐指数
14
解决办法
19万
查看次数

你最有争议的编程意见是什么?

这绝对是主观的,但我想尽量避免它变得有争议.我认为如果人们适当地对待它可能是一个有趣的问题.

对这个问题的想法来自评论跟帖从我的回答:"你恨你喜欢的语言什么的五件事?" 问题.我争辩说C#中的类应该默认密封 - 我不会把我的推理放在这个问题上,但我可以写一个更全面的解释作为这个问题的答案.我对评论中讨论的热度感到惊讶(目前有25条评论).

那么,持有什么有争议的意见?我宁愿避免那种以相对较少的基础(例如括号放置)而变得非常宗教的东西,但是例子可能包括诸如"单元测试实际上并不十分有用"或"公共领域真的很好"之类的东西.重要的是(对我来说,无论如何)是你有理由支持你的意见.

请提出您的意见和推理 - 我鼓励人们投票支持有争议和有趣的意见,无论您是否恰好同意这些意见.

language-agnostic

363
推荐指数
237
解决办法
29万
查看次数

从Linq中的列表中选择多个字段

在ASP.NET C#中我有一个结构:

public struct Data
{
    public int item1;
    public int item2;
    public int category_id;
    public string category_name;
}
Run Code Online (Sandbox Code Playgroud)

我有一份清单.我要选择category_idcategory_name,运行的DISTINCT最后一个ORDERBYcategory_name.

这就是我现在拥有的:

List<Data> listObject = getData();
string[] catNames = listObject
                    .Select(i=> i.category_name)
                    .Distinct()
                    .OrderByDescending(s => s)
                    .ToArray();
Run Code Online (Sandbox Code Playgroud)

这显然只是获得了类别名称.我的问题是,我如何获得多个字段,以及将其存储在(不是a string[])中的数据结构?

编辑

使用结构列表并不是一成不变的.如果建议更改我的支持数据结构以使选择更容易(我将写很多这些),那么我很乐意接受建议.

c# linq data-structures

125
推荐指数
6
解决办法
38万
查看次数

结构与课程

我即将在代码中创建100,000个对象.它们很小,只有2或3个属性.我将它们放在一个通用列表中,当它们存在时,我将循环它们并检查值a并可能更新值b.

将这些对象创建为类还是结构更快/更好?

编辑

一个.属性是值类型(我认为字符串除外?)

湾 他们可能(我们还不确定)有一个验证方法

编辑2

我想知道:堆上的对象和堆栈是否由垃圾收集器同等处理,或者它的工作方式有何不同?

c# struct

89
推荐指数
4
解决办法
6万
查看次数

为什么C#结构是不可变的?

我只是想知道为什么结构,字符串等是不可变的?是什么原因使它们成为不可变的,其余的对象是可变的.有什么东西被认为是使对象不可变的?

对可变和不可变对象分配和释放内存的方式有什么不同吗?

.net c# immutability

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

如何初始化struct?

我应该在我的任意结构中实现什么成员才能使以下任务成为可能:

public struct MyStruct {
   String s;
   Int length;
}

MyStruct myStruct = new MyStruct { s = "Hello", length = 5 };

// Now, I want the following code to set the 's' to "Lol" and the
// length to 3 (length of "Lol"). The second part should be done
// automatically.
myStruct = "Lol"; // Or myStruct = String("Lol");
Run Code Online (Sandbox Code Playgroud)

该怎么做?

c# struct initialization

53
推荐指数
3
解决办法
11万
查看次数

如何以正确的方式初始化KeyValuePair对象?

我已经在(其中包括)这个问题中看到人们想知道如何初始化KeyValuePair的实例,预计应该看起来像这样.

KeyValuePair<int, int> keyValuePair = new KeyValuePair<int, int>
{ 
  Key = 1,
  Value = 2
};
Run Code Online (Sandbox Code Playgroud)

它不起作用,好像属性不存在.Intead,我需要像这样使用构造函数.

KeyValuePair<int, int> keyValuePair = new KeyValuePair<int, int>(1, 2);
Run Code Online (Sandbox Code Playgroud)

不可否认,语法较短,但我不能使用初始化程序.我究竟做错了什么?

c# initialization

46
推荐指数
7
解决办法
5万
查看次数

值类型是否按定义不可变?

我经常读到structs应该是不可变的 - 根据定义它们不是吗?

你认为int是不可改变的吗?

int i = 0;
i = i + 123;
Run Code Online (Sandbox Code Playgroud)

似乎没关系 - 我们得到一个新的int并将其分配给i.那这个呢?

i++;
Run Code Online (Sandbox Code Playgroud)

好的,我们可以把它想象成一条捷径.

i = i + 1;
Run Code Online (Sandbox Code Playgroud)

怎么样struct Point

Point p = new Point(1, 2);
p.Offset(3, 4);
Run Code Online (Sandbox Code Playgroud)

这真的改变了这一点(1, 2)吗?我们难道不应该将它视为Point.Offset()返回新点的下列捷径吗?

p = p.Offset(3, 4);
Run Code Online (Sandbox Code Playgroud)

这种想法的背景是这样的 - 没有身份的价值类型怎么可能是可变的?您必须至少查看两次以确定它是否发生了变化.但是如果没有身份,你怎么能这样做呢?

我不想通过考虑ref参数和拳击来使这个推理复杂化.我也知道,p = p.Offset(3, 4);表达不变性比做得好p.Offset(3, 4);.但问题仍然存在 - 根据定义,值不是不可变的值吗?

UPDATE

我认为至少涉及两个概念 - 变量或字段的可变性以及变量值的可变性.

public class Foo
{
    private Point point; …
Run Code Online (Sandbox Code Playgroud)

.net c# immutability value-type

40
推荐指数
4
解决办法
9421
查看次数

我应该使用结构或类来表示Lat/Lng坐标吗?

我正在使用地理编码API,需要将返回点的坐标表示为纬度/经度对.但是,我不确定是否为此使用结构或类.我最初的想法是使用一个结构,但它们似乎在C#中通常不赞成(例如,Jon Skeet 在这个答案中提到"我几乎从不定义自定义结构").性能和内存使用不是应用程序中的关键因素.

到目前为止,我已经基于一个简单的接口提出了这两个实现:

接口

public interface ILatLng
{
    double Lat { get; }
    double Lng { get; }
}
Run Code Online (Sandbox Code Playgroud)

LatLng类实现

public class CLatLng : ILatLng
{
    public double Lat { get; private set; }
    public double Lng { get; private set; }

    public CLatLng(double lat, double lng)
    {
        this.Lat = lat;
        this.Lng = lng;
    }

    public override string ToString()
    {
        return String.Format("{0},{1}", this.Lat, this.Lng);
    }

    public override bool Equals(Object obj)
    {
        if (obj == null)
            return …
Run Code Online (Sandbox Code Playgroud)

.net c# struct geocoding

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

是否有在C#中重载赋值运算符的解决方法?

与C++不同,在C#中,您不能重载赋值运算符.

我正在为具有非常大数字的算术运算做一个自定义Number类,我希望它具有内置数值类型的外观,如int,decimal等.我已经重载了算术运算符,但是任务仍然是......

这是一个例子:

Number a = new Number(55); 
Number b = a; //I want to copy the value, not the reference
Run Code Online (Sandbox Code Playgroud)

该问题是否有解决方法?

c# operator-overloading

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