相关疑难解决方法(0)

为什么可变结构"邪恶"?

在这里讨论了SO之后,我已经多次读过可变结构是"邪恶"的评论(就像这个问题的答案一样).

C#中可变性和结构的实际问题是什么?

c# struct mutable immutability

470
推荐指数
15
解决办法
7万
查看次数

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)

但是这段代码没有用,几天都没有添加!我正在做的那个愚蠢的错误是什么?

c# datetime date add c#-4.0

59
推荐指数
6
解决办法
18万
查看次数

比较盒装值类型

今天我偶然发现了一个有趣的错误.我有一组属性可以通过一般的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()盒装值.这样做的装箱值的检查似乎有点矫枉过正.是不是有更简单的方法?

c# boxing unboxing equality

35
推荐指数
2
解决办法
8261
查看次数

C#中两个结构的相等性

我寻找这个结构的两个实例之间的相等.

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)

c#

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

是转换线程的扩展方法安全

请考虑以下代码:

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)

这个方法也是线程吗?

c# extension-methods thread-safety c#-4.0 c#-6.0

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