Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从字符串中检索特定数字_C#_Properties_Struct_Set_Accessor - Fatal编程技术网

C# 从字符串中检索特定数字

C# 从字符串中检索特定数字,c#,properties,struct,set,accessor,C#,Properties,Struct,Set,Accessor,我正在实现复数结构,我希望用户能够通过属性Geo将值插入Re和Im字段,这是复数的几何解释,例如(5,-3) 我不知道如何制作set访问器。基本上,我想从(x,y)字符串中检索数字x,y,这样我就可以将它们放入双字段中。只需解析包含(5,-3)等输入的value,删除括号和空格,并将值转换为double set { var input = value.Split(new[] { '(', ')', ',' }, StringSplitOptions.RemoveEmptyEntries)

我正在实现复数结构,我希望用户能够通过属性Geo将值插入Re和Im字段,这是复数的几何解释,例如(5,-3)


我不知道如何制作set访问器。基本上,我想从(x,y)字符串中检索数字x,y,这样我就可以将它们放入双字段中。

只需解析包含(5,-3)等输入的
value
,删除括号和空格,并将值转换为double

set
{
    var input = value.Split(new[] { '(', ')', ',' }, StringSplitOptions.RemoveEmptyEntries);
    Re = Convert.ToDouble(input[0]);
    Im = Convert.ToDouble(input[1]);
}
请注意,结构应该是不可变的,所以我建议将值传递给构造函数,而不是通过属性设置它们。这是一个正确的方法

struct Cplx
{
    public readonly double Re;
    public readonly double Im;

    public string Geo
    {
        get
        {
            return "(" + Re + "," + Im + ")";
        }
    }

    public Cplx(double re, double im)
    {
        Re = re;
        Im = im;
    }

    public Cplx(string cplx)
    {
        var input = cplx.Split(new[] { '(', ')', ',' }, StringSplitOptions.RemoveEmptyEntries);
        Re = Convert.ToDouble(input[0]);
        Im = Convert.ToDouble(input[1]);
    }
}

它真的必须是二传手吗?这难道不是一种方法吗?。。。或者最好两个设置器,每个组件一个。这样,您可以确保用户理解他们输入的内容。字符串的格式可能不正确。可能是这样,但这不是属性的用途吗?(我不是想刻薄——我是在问)@lavsprat,你完全正确,房产会更好用。我想现在还为时过早…@AndreiV我只是不喜欢字符串属性设置整型/浮点型字段。
struct Cplx
{
    public readonly double Re;
    public readonly double Im;

    public string Geo
    {
        get
        {
            return "(" + Re + "," + Im + ")";
        }
    }

    public Cplx(double re, double im)
    {
        Re = re;
        Im = im;
    }

    public Cplx(string cplx)
    {
        var input = cplx.Split(new[] { '(', ')', ',' }, StringSplitOptions.RemoveEmptyEntries);
        Re = Convert.ToDouble(input[0]);
        Im = Convert.ToDouble(input[1]);
    }
}