【发布时间】:2014-11-03 06:17:21
【问题描述】:
我使用这个约定(受 F# 单元的启发)来捕获某些类别的编程错误:
public struct Inch : IComparable<Inch>
{
public readonly float Value;
public Inch(int value) : this() { Value = value; }
public static implicit operator Inch(float value) { return new Inch(value); }
public int CompareTo(Inch other) { return Value.CompareTo(other.Value); }
public override string ToString() { return Value.ToString(); }
}
加法等操作就是这样进行的:
Inch a, b;
Inch result = a.Value + b.Value;
这允许Inch 以值类型的低开销传递,其优点是它不会被意外分配给普通的float。 (我发现允许在相反方向进行隐式转换,即浮点数到Inches,通常不会导致错误。)
问题:在显示的加法示例中特别是是否存在已知的性能问题。同样,这个问题只是关于性能,我对语义没有任何疑问。
【问题讨论】:
-
对于那些因过于宽泛而投票结束的人,我已将问题改写为非常狭窄。
-
您的问题并不狭窄。您非常具体地不将其缩小到给定的上下文。如果是这样,您可以在该上下文中分析代码并自己找出问题是否存在。您在问代码将如何在可能存在的每个单独的上下文中执行,由于范围,这当然是无法回答的。
-
不,我不是这么问的。我在问这种方法是否存在已知问题,而不是一揽子验证。我承担使用此代码的风险。 :)
-
如何缩小范围?在任何可能的情况下询问任何可能罗科的已知问题不再合理。
-
我们在我们的一个应用程序中尝试了类似的方法,但成本太高(加法等基本操作的开销是 2 到 5 倍),所以我们备份了。但是进行了很多的计算。
标签: c# performance struct units-of-measurement