小编Tim*_*sen的帖子

整数转换为WoW Gold

对于一个MMORPG魔兽世界我试图写一个lib.该游戏中的钱存储为整数,而游戏货币不是整数,它基于金币,银币和铜币.

每100个铜是1个银,每100个银是1个金.

现在我需要将这样的整数转换为WoW Money格式:例如

123123应该返回: 23c 31s 12g

任何人都知道如何做到这一点

integer

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

组织这个项目的最佳方法是什么?

我目前正试图找出组织我正在进行的项目的最佳方法.它将成为人们可以使用的SDK.

但是,我对组织这个项目有些不满.我有一些名称空间和一些项目.这些项目编译成不同的DLL.

当我编译所有时,我有以下程序集:

Application
Application.Entities
Application.DataAccess
Run Code Online (Sandbox Code Playgroud)

但是,在那些程序集中仍然有一些不同的命名空间,比如

Application.DataAccess.SourceProviders
Application.DataAccess.SourceParser 
Run Code Online (Sandbox Code Playgroud)

所以你可以看到我对此并不十分一致.我没有为每个命名空间创建不同的程序集,因为我觉得它不会增加10+ dll的值.

但我在这里有一些问题,所以我可以决定我将如何做.

  1. 为应用程序的不同部分使用不同的程序集有什么好处,而不是只使用1个包含ALL的DLL.
  2. 通过使用不同的项目(cq assembly/dll)从逻辑中分离DAL是一个好主意.
  3. 您是否在VisualStudio或SDK设计中有一些关于项目组织的信息来源.

干杯,

蒂莫

c# dependencies project organization visual-studio

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

单元测试类有双打

我有一个包含(一个或多个......)双打的课程.例如:

public class TestFloatClass{
 public double Double1{get;set;}
 public double Double2{get;set;}

 public void SetDoubleByCalculation(double value){
  Double1 = //Some calculations here;
  Double2 = //Some calculations here;
 } 
}
Run Code Online (Sandbox Code Playgroud)

我想测试SetDoubleByCalculation(double value)方法,所以我开始编写单元测试.

TestFloatClass expected = new TestFloatClass();
expected.Double1 = 100.10;
expected.Double2 = 200.24554;

TestFloatClass actual = new TestFloatClass();
actual.SetDoubleByCalculation(Math.PI); //Just using something random here.
Run Code Online (Sandbox Code Playgroud)

在这种情况下,expected.Double1并且actual.Double1大致相同.但不完全是由于浮点精度.

但是,我不确定如何正确地进行单元测试.这些是我到目前为止所尝试过的.

在equals运算符中包含某个delta

我的第一个直觉说,好吧,只需在equals运算符中包含逻辑,如下所示:

public override bool Equals(object obj){
  return Math.Abs(this.Double1 - obj.Double1) <= 0.00001 &&
              Math.Abs(this.Double1 - obj.Double1)  <= 0.00001; 
}
Run Code Online (Sandbox Code Playgroud)

但正如在这个Hashcode实现双精度 …

c# unit-testing floating-accuracy

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

多个BinaryReader.Read()和BinaryReader.ReadBytes(int i)之间的区别

我正在搜索BinaryReader.Skip函数,而我在msdn上遇到了这个功能请求.他说你可以使用它来提供你自己的BinaryReader.Skip()函数.

只看这段代码,我想知道为什么他选择这种方式跳过一定数量的字节:

    for (int i = 0, i < count; i++) {
        reader.ReadByte();
    }
Run Code Online (Sandbox Code Playgroud)

它和之间有区别吗:

reader.ReadBytes(count);
Run Code Online (Sandbox Code Playgroud)

即使它只是一个小的优化,我也不愿意.因为现在它对我来说没有意义,为什么你会使用for循环.

public void Skip(this BinaryReader reader, int count) {
    if (reader.BaseStream.CanSeek) { 
        reader.BaseStream.Seek(count, SeekOffset.Current); 
    }
    else {
        for (int i = 0, i < count; i++) {
            reader.ReadByte();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

c# binary

5
推荐指数
1
解决办法
3283
查看次数

为什么Stream.Position很长

当我遇到一些我想知道的东西时,我正在弄乱一些二进制文件的解析.

Stream.Position属性属于Int64或类型long.为什么是这样?使用a是不是更有意义,UInt64因为流中的位置不能为负?

任何人都知道这是一个签名长而不是未签名长的用途?

c# asp.net long-integer

5
推荐指数
1
解决办法
327
查看次数

while循环中的可变初始化

我有一个以块的形式读取文件的函数.

public static DataObject ReadNextFile(){ ...}
Run Code Online (Sandbox Code Playgroud)

dataobject看起来像这样:

public DataObject
{
   public string Category { get; set; }

   // And other members ...
}
Run Code Online (Sandbox Code Playgroud)

基本上我想做的是以下内容

List<DataObject> dataObjects = new List<DataObject>();

while(ReadNextFile().Category == "category")
{
   dataObjects.Add(^^^^^ the thingy in the while);
}
Run Code Online (Sandbox Code Playgroud)

我知道它可能不是这样做的,因为我如何访问我刚读过的对象.

c# initialization while-loop

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

在c#中接受浮点不准确有什么好处?

最近 几天我脑子里已经遇到了这个问题,我很难说出我的问题.但是,我想我已经钉了我想知道的东西.

为什么c#通过使用浮点来存储数据来接受不准确?使用它比其他方法有什么好处?

例如,Math.Pow(Math.Sqrt(2),2)在c#中并不精确.有些编程语言可以精确计算它(例如,Mathematica).

我能想到的一个论点是,计算它确实比仅仅处理不准确性慢得多,但Mathematica和Matlab用于计算巨大的科学问题,所以我发现很难相信这些语言真的比c#慢得多.

那么为什么呢?

PS:我很抱歉用这些问题向你发送垃圾邮件,你们都非常乐于助人

c# floating-point floating-accuracy

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

循环依赖最佳实践

我目前正在编写一个网络刮刀,可以从互联网上检索信息.简化它看起来像这样.

数据访问项目

  • 用于检索原始数据的对象
  • 将原始数据解析为对象的对象(!!)
  • 解析器返回的实体.

现在,我正在创建实际的解析器,我将使用它像这样:

using Application.DataAccess;
using Application.DataAccess.Entities;

namespace Application{
 public class TestScraper{
  public static ScrapeIt()
  {
   var source = DataAcces.Retriever.Retrieve("http://example.com");
   DataAccess.Entities.Entity entity = DataAccess.Parser.Parse(source);

   //Do stuf with source here.
  }
 }
}
Run Code Online (Sandbox Code Playgroud)

如您所见,Parser返回一个实体.然而,这是在DataAccess名称空间中,但它没有意义......它是一个圆圈,我真的不知道如何解决这个问题.好吧,我可以想出一些东西,比如在这些层之间创建另一层.

但我只是想知道,你将如何解决这个问题.什么是好的(或最好的做法).

c# circular-dependency

5
推荐指数
1
解决办法
7969
查看次数

Hashcode实现双精度

我之前已经问了一个关于这个课程的问题,但这里又是一个问题.

我创建了一个Complex类:

 public class Complex
 {
        public double Real { get; set; }
        public double Imaginary { get; set; }
 }
Run Code Online (Sandbox Code Playgroud)

我正在实现EqualsHashcode函数,而Equal函数考虑了一定的精度.我使用以下逻辑:

    public override bool Equals(object obj)
    {
        //Some default null checkint etc here, the next code is all that matters.
        return Math.Abs(complex.Imaginary - Imaginary) <= 0.00001 &&
            Math.Abs(complex.Real - Real)  <= 0.00001;
    }
Run Code Online (Sandbox Code Playgroud)

这是有效的,当虚构和真实部分彼此非常接近时,它说它们是相同的.

现在我正在尝试实现HashCode函数,我已经使用了一些John skeet在这里使用的示例,目前我有以下内容.

    public override int GetHashCode()
    {
        var hash = 17;
        hash = hash*23 + Real.GetHashCode();
        hash = hash*23 + Imaginary.GetHashCode(); …
Run Code Online (Sandbox Code Playgroud)

c# floating-point precision hashcode

5
推荐指数
1
解决办法
2348
查看次数

Google Chrome vertical <input type ="range"/>

在歌剧中,我可以做到以下几点

<style>
#range{
 width: 20px;
 heigth: 300px;
}
</style>

<input type="range" id="range" />
Run Code Online (Sandbox Code Playgroud)

它将呈现一个垂直滑块.但是,这似乎不适用于chrome.有没有办法可以做到这一点?(我不是在寻找任何jQuery滑块或任何东西)

html css google-chrome

4
推荐指数
3
解决办法
9985
查看次数