在属性设置器中采用多种类型

use*_*388 4 c# setter types properties

我想选择设置具有多个类型的属性,并且正在努力寻找解决方案。

public static PropertyType Property
        {
            get { return Property;}
            set {
                if (value.GetType() == typeof(PropertyType))
                {
                    Property = value;                       
                }

                //Or any other type
                if (value.GetType() == typeof(string))
                {
                    Property = FunctionThatReturnsPropertyType(value);
                }
            }
        }
Run Code Online (Sandbox Code Playgroud)

我希望这是有道理的,我只将Property设置为一种类型,但是我希望能够将其分配给其他类型,然后在setter中进行转换-这可能吗?

Dil*_*ser 5

您想要的东西看起来像是设计错误。在C#属性中,setter和getter始终具有相同的类型。因此,您基本上有下一个选择:

  • 按照问题中的说明进行属性类型设置object(或者dynamic如果您希望获得更差的设计)并在设置器中转换值- 我强烈建议您避免这种方法
  • 摆脱property概念,创建单独的方法以获取字段的值并从不同类型进行分配。如果您在编译时不知道类型,则此方法将允许您分配值,而getter方法仍将正确键入。但总的来说,它看起来仍然像是糟糕的设计。
  • 在属性外进行所有转换,首选此解决方案。您应该知道每种情况下将使用哪种类型