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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Visual C#,无法将我的struct用作属性相关的知识,希望对你有一定的参考价值。

我创建了一个包含几个自制属性的用户控件。当我尝试将属性类型设置为内置结构(如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;}
    }

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

答案

如果你想要一个有意义的输出,你应该覆盖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只返回对象类型的完全限定名称。

另一答案

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

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

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

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

以上是关于Visual C#,无法将我的struct用作属性的主要内容,如果未能解决你的问题,请参考以下文章

如果无法创建 vcxproj 文件,是不是可以将 MSBuild 用作带有 Visual Studio 代码的 C++ 编译器?

“未指定的错误”Visual Studio 2008 64 位

C ++:是否可以将引用用作映射中的值?

如何让C#设计器编辑我的struct属性?

c_cpp 如何将结构用作函数返回类型或函数的参数? - 来自https://playground.arduino.cc/Code/Struct

visual studio 无法引用第三方库?