Visual C#,无法将我的struct用作属性

问题描述 投票:0回答:2

我创建了一个包含几个自制属性的用户控件。当我尝试将属性类型设置为内置结构(如Point或Size)时,它显示正常!

public Point myProperty { get; set; }

enter image description here

但是当我将它设置为我自己的结构时,它不起作用!它变成PriceInput.PriceInput + myStruct(PriceInput是命名空间)

enter image description here

myStruct看起来像

    public struct myStruct
    {
        public int A {get;set;}
        public int B {get;set;}
        public int C {get;set;}
        public int D {get;set;}
    }

为什么!?我错过了什么!?非常感谢你的帮助!

c# struct properties controls
2个回答
1
投票

如果你想要一个有意义的输出,你应该覆盖ToString

public struct myStruct
{
    public int A {get;set;}
    public int B {get;set;}
    public int C {get;set;}
    public int D {get;set;}

    public override string ToString()
    {
        return $"{A}:{B}:{C}:{D}";
    }
}

Object.ToString只返回对象类型的完全限定名称。


0
投票

默认情况下,每个类或结构只会在任何输出中打印出自己的名称,无论是控制台还是其他任何输出。在你的情况下,这是PriceInput.PriceInput+myStruct。这是因为运行时不知道要打印什么。想象一下,你的结构中会有更多属性。是否应该全部输出?或者只是几个?它们应该如何格式化?这就是为什么运行时决定不猜测并简单地打印出类`/ structs名称。

为了避免这种情况(也就是Point也这样做),覆盖结构中的ToString方法:

public struct myStruct
{
    public override string  ToString()
    {
        return "Whatever";
    }
}

如果不重写此方法,则从object获取基本实现,它只返回类型名称,如上所示。

© www.soinside.com 2019 - 2024. All rights reserved.