相关疑难解决方法(0)

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

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

.net algorithm hashcode gethashcode

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

C#可以将值类型与null进行比较

我今天碰到了这个,并且不知道为什么C#编译器没有抛出错误.

Int32 x = 1;
if (x == null)
{
    Console.WriteLine("What the?");
}
Run Code Online (Sandbox Code Playgroud)

我很困惑x怎么可能是null.特别是因为这个赋值肯定会抛出编译器错误:

Int32 x = null;
Run Code Online (Sandbox Code Playgroud)

是否有可能x变为null,微软是否决定不将此检查放入编译器,还是完全错过了?

更新:在编写了这篇文章的代码后,编译器突然发出一个警告,表达式永远不会成立.现在我真的迷路了.我把对象放到一个类中,现在警告已经消失,但是留下了问题,值类型最终是否为null.

public class Test
{
    public DateTime ADate = DateTime.Now;

    public Test ()
    {
        Test test = new Test();
        if (test.ADate == null)
        {
            Console.WriteLine("What the?");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

c# null

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

哪个最适合数据存储结构/类?

我们已经在SO中看到了很多关于c#中的类vs结构的讨论.最后得出的结论是它的堆/堆内存分配.并建议在小型数据结构中使用结构.

现在我有一种情况来决定这两种选择中的简单数据存储.在我们的应用程序中,我们有数千个类,只是作为简单的数据存储(仅暴露的公共字段),它们在不同的模块和服务之间传递.

根据我的理解,出于性能原因,我觉得最好继续使用struct而不是类.因为这些是简单的数据结构,所以只能充当数据存储.

在继续这一过程之前,我需要经历过这场斗争的人们的一些专家建议.

  • 我的理解是正确的吗?
  • 我见过大多数ORM都有类作为数据存储.所以我怀疑是否应该继续使用类而不是结构.会是什么?

c# struct class

29
推荐指数
4
解决办法
8814
查看次数

定义operator ==但没有定义Equals()或GetHashCode()有什么问题?

对于下面的代码

public struct Person
{
    public int ID;
    public static bool operator ==(Person a, Person b) { return  a.Equals(b); }
    public static bool operator !=(Person a, Person b) { return !a.Equals(b); }
}
Run Code Online (Sandbox Code Playgroud)

为什么编译器会给我这些警告?
没有定义下面的方法有什么问题?

warning CS0660: 'Person' defines operator == or operator != but
    does not override Object.Equals(object o)

warning CS0661: 'Person' defines operator == or operator != but
    does not override Object.GetHashCode()
Run Code Online (Sandbox Code Playgroud)

c# warnings equals equals-operator

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

通过自定义结构类型校对原语.NET值类型:值得努力吗?

我正在考虑通过将它们包装在自定义中来使原始.NET值类型更加类型安全并且更"自我记录" struct.但是,我想知道它是否真的值得在现实世界的软件中付出努力.

(这种"努力"可以在下面看到:必须一次又一次地应用相同的代码模式.我们声明structs,因此不能使用继承来删除代码重复;并且由于必须声明重载的运算符static,因此必须定义它们对于每种类型单独.)

拿这个(公平地说是微不足道的)例子:

struct Area
{
    public static implicit operator Area(double x) { return new Area(x); }
    public static implicit operator double(Area area) { return area.x; }

    private Area(double x) { this.x = x; }
    private readonly double x;
}

struct Length
{
    public static implicit operator Length(double x) { return new Length(x); }
    public static implicit operator double(Length length) { return length.x; }

    private Length(double x) { this.x = x; }
    private readonly …
Run Code Online (Sandbox Code Playgroud)

c# struct primitive-types type-safety implicit-conversion

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

转换double值以生成Point类型

我想使用imagefrom位图在图片框中绘制一条曲线(二极管曲线).我现在遇到一个问题,我的点数据被保存为Double,保持这种状态非常重要.

例如,我的情节中的一个点是这样的:

电压:-0.175电流:-9.930625E-06

是的,这是一个双倍!现在我怎么能有一点要做的例子:

        Point[] ptarray = new Point[3];
        ptarray[0] = new Point(250, 250);
Run Code Online (Sandbox Code Playgroud)

是否有一个替代Point []接受双值?我有一个500x500的图片框.有没有办法将这些值转换为仍可以节省成本的有效点?我正在使用微安培(10 ^ -6)和电压!

c# double point

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

带结构和字符串的C#HashSet

我创建了以下代码来验证一系列"元组"的唯一性:

struct MyTuple
{
   public MyTuple(string a, string b, string c)
   {
      ValA = a; ValB = b; ValC = c;
   }
   private string ValA;
   private string ValB;
   private string ValC;
}

...

HashSet<MyTuple> tupleList = new HashSet<MyTuple>();
Run Code Online (Sandbox Code Playgroud)

如果我是正确的,我将不会得到两个具有相同值的元组,HashSet这要归功于我正在使用一个结构.如果没有实现类IEquatable或类似的东西我就不能有相同的行为(我没有太多挖掘如何做到这一点).

我想知道是否有一些关于我做什么的问题.性能方面,考虑到里面的字符串是引用类型,我不希望结构的使用成为问题.

编辑:我希望我的HashSet永远不会包含两个具有相同值的字符串的元组.换句话说,我希望字符串的行为类似于值类型.

c#

6
推荐指数
1
解决办法
5214
查看次数

C#中有"记录"吗?

我希望将一些客户数据存储在内存中,我认为最好的方法是使用一组记录.我不确定这是否是它在C#中所称的,但基本上我可以调用Customer(i).Name并将客户名称作为字符串返回.在图灵,它的完成如下:

type customers :
    record
        ID : string
        Name, Address, Phone, Cell, Email : string
        //Etc...
    end record
Run Code Online (Sandbox Code Playgroud)

我已经搜索过,但我似乎无法找到C#的等价物.有人能指出我正确的方向吗?

谢谢!:)

.net c# record visual-studio-2012

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

字典中的KeyNotFound异常(T)

我准备好把头撞在墙上

我有一个名为Map的类,它有一个名为tiles的字典.

class Map
{
    public Dictionary<Location, Tile> tiles = new Dictionary<Location, Tile>();
    public Size mapSize;

    public Map(Size size)
    {
        this.mapSize = size;
    }
   //etc...
Run Code Online (Sandbox Code Playgroud)

我暂时填写这本字典来测试一些东西..

public void FillTemp(Dictionary<int, Item> itemInfo)
    {
        Random r = new Random();
        for(int i =0; i < mapSize.Width; i++)
        {
            for(int j=0; j<mapSize.Height; j++)
            {
                Location temp = new Location(i, j, 0);

                int rint = r.Next(0, (itemInfo.Count - 1));

                Tile t = new Tile(new Item(rint, rint));

                tiles[temp] = t;
            }
        }

    }
Run Code Online (Sandbox Code Playgroud)

并在我的主程序代码中

Map m …
Run Code Online (Sandbox Code Playgroud)

c# dictionary equals keynotfoundexception

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