在这里讨论了SO之后,我已经多次读过可变结构是"邪恶"的评论(就像这个问题的答案一样).
C#中可变性和结构的实际问题是什么?
我想在某个日期添加日子.我有这样的代码:
DateTime endDate = Convert.ToDateTime(this.txtStartDate.Text);
Int64 addedDays = Convert.ToInt64(txtDaysSupp.Text);
endDate.AddDays(addedDays);
DateTime end = endDate;
this.txtEndDate.Text = end.ToShortDateString();
Run Code Online (Sandbox Code Playgroud)
但是这段代码没有用,几天都没有添加!我正在做的那个愚蠢的错误是什么?
今天我偶然发现了一个有趣的错误.我有一组属性可以通过一般的setter设置.这些属性可以是值类型或引用类型.
public void SetValue( TEnum property, object value )
{
if ( _properties[ property ] != value )
{
// Only come here when the new value is different.
}
}
Run Code Online (Sandbox Code Playgroud)
在为此方法编写单元测试时,我发现值类型的条件始终为真.我花了很长时间才弄清楚这是由于拳击/拆箱.我没有花太多时间将代码调整为以下内容:
public void SetValue( TEnum property, object value )
{
if ( !_properties[ property ].Equals( value ) )
{
// Only come here when the new value is different.
}
}
Run Code Online (Sandbox Code Playgroud)
问题是我对这个解决方案并不完全满意.我想保留一个简单的参考比较,除非该值被加框.
我想到的当前解决方案只是要求Equals()盒装值.这样做的装箱值的检查似乎有点矫枉过正.是不是有更简单的方法?
我寻找这个结构的两个实例之间的相等.
public struct Serie<T>
{
T[] X;
double[] Y;
public Serie(T[] x, double[] y)
{
X = x;
Y = y;
}
public override bool Equals(object obj)
{
return obj is Serie<T> && this == (Serie<T>)obj;
}
public static bool operator ==(Serie<T> s1, Serie<T> s2)
{
return s1.X == s2.X && s1.Y == s2.Y;
}
public static bool operator !=(Serie<T> s1, Serie<T> s2)
{
return !(s1 == s2);
}
Run Code Online (Sandbox Code Playgroud)
这不起作用.我错过了什么?
double[] xa = { 2, 3 };
double[] ya = …Run Code Online (Sandbox Code Playgroud) 请考虑以下代码:
public static int ToInt (this string str)
{
return Convert.ToInt32 (str);
}
Run Code Online (Sandbox Code Playgroud)
我应该使用lock这个声明吗?
编辑1)
public static int ToInt(this string str)
{
int Id = -1;
if (str.IsEmpty() == true ||
int.TryParse(str.Trim().Replace(",", ""), out Id) == false)
{
throw new Exception("Invalid Parameter: " + str);
}
else
{
return Id;
}
}
Run Code Online (Sandbox Code Playgroud)
这个方法也是线程吗?